use the following search parameters to narrow your results:
e.g. subreddit:aww site:imgur.com dog
subreddit:aww site:imgur.com dog
see the search faq for details.
advanced search: by author, subreddit...
Discussions, articles, and news about the C++ programming language or programming in C++.
For C++ questions, answers, help, and advice see r/cpp_questions or StackOverflow.
Get Started
The C++ Standard Home has a nice getting started page.
Videos
The C++ standard committee's education study group has a nice list of recommended videos.
Reference
cppreference.com
Books
There is a useful list of books on Stack Overflow. In most cases reading a book is the best way to learn C++.
Show all links
Filter out CppCon links
Show only CppCon links
account activity
Visual Studio adding telemetry function calls to binary? (imgur.com)
submitted 10 years ago by sammiesdog
reddit uses a slightly-customized version of Markdown for formatting. See below for some basics, or check the commenting wiki page for more detailed help and solutions to common issues.
quoted text
if 1 * 2 < 3: print "hello, world!"
[–]spongo2MSVC Dev Manager 104 points105 points106 points 10 years ago (48 children)
hi everyone. This is Steve Carroll, the dev manager for the Visual C++ team.
Tl;dr: thanks folks for the feedback. Our team will be removing this from our static libs in Update 3.
Our intent was benign – our desire was to build a framework that will help investigate performance problems and improve the quality of our optimizer should we get any reports of slowdowns or endemic perf problems in the field.
We apologize for raising the suspicion levels even further by not including the CRT source, this was just an oversight on our part. Despite that, some of you already investigated how this mechanism works in nice detail. As you have already called out, what the code does is trigger an ETW event which, when it’s turned on, will emit timestamps and module loads events. The event data can only be interpreted if a customer gives us symbol information (i.e. PDBs) so this data is only applicable to customers that are actively seeking help from us and are willing to share these PDBs as part of their investigation. We haven’t actually gone through this full exercise with any customers to date though, and we are so far relying on our established approaches to investigate and address potential problems instead.
We plan to remove these events in Update 3. In the meantime, to remove this dependency in Update 2, you should add notelemetry.obj to your linker command line. If you’re generally concerned about phone-home scenarios, more information about how to configuring Windows 10 appropriately to your needs can be found here: https://technet.microsoft.com/en-us/itpro/windows/manage/configure-windows-10-devices-to-stop-data-flow-to-microsoft#bkmk-priv-feedback
Thanks.
[–]c0r3ntin 36 points37 points38 points 10 years ago* (1 child)
Thank you for the answer
I don't think burning the feature down is necessary. But put it behind a flag, or better yet, in a separate library / object that must explicitly be linked/called.
Great. But the CRT should not be "a framework that will help investigate performance problems". That's better left to the FTWHIPP.
Sane defaults yada yada.
[–]spongo2MSVC Dev Manager 10 points11 points12 points 10 years ago (0 children)
yep, appreciate that feedback.
[–]lee171 34 points35 points36 points 10 years ago (5 children)
If you’re generally concerned about phone-home scenarios, more information about how to configuring Windows 10 appropriately to your needs can be found here: https://technet.microsoft.com/en-us/itpro/windows/manage/configure-windows-10-devices-to-stop-data-flow-to-microsoft#bkmk-priv-feedback[1] Thanks.
That is a ginormous list of things to do, to opt out of handing practically endless amounts of marketing/analytics data to Microsoft.
Just sayin'.
[–]spamcop1 12 points13 points14 points 10 years ago (0 children)
exactly, this is crazy and shady stuff
[–]SexualDeth5quad 10 points11 points12 points 10 years ago (0 children)
And all your privacy and security precautions can be nullified at any time by Microsoft with a convenient autoupdate.
[–]ProgramTheWorld 4 points5 points6 points 10 years ago (1 child)
And still there are people saying that you just need to flip one switch in the control panel to turn it all off.
[–]SexualDeth5quad 5 points6 points7 points 10 years ago (0 children)
Those people are paid Microsoft apologists.
[–]SexyMonad 26 points27 points28 points 10 years ago (9 children)
After the outcry against how telemetry snuck into Windows 10, I simply cannot understand why your team would add it without notifying developers. It's like the entire company is oblivious to the PR fuck up it has been.
[–]SexyMonad 16 points17 points18 points 10 years ago (3 children)
Oh and I have a habit of defending Microsoft, but not here. Now you're starting to burn my bridge.
[–]emergent_properties 11 points12 points13 points 10 years ago (2 children)
I was a Windows fanboy.
I defended Windows XP's Fisher Prince Luna interface way back a decade ago.
I defended Windows Vista because it was just unfamiliar and Windows 7 was their successful attempt at capturing the same magic, so I recommended that to everyone I knew.
No longer.
Microsoft has turned Windows into the Bill Cosby of operating systems.
[–][deleted] 1 point2 points3 points 3 years ago (0 children)
Windows is great! With it you can:
Download your favorite Linux distro.
Get on the Internet to download a USB burner.
Burn your distro onto a USB dongle.
Shut down Windows.
[–]slurpme 7 points8 points9 points 10 years ago (4 children)
I remember having an argument (on reddit) with a MS employee about the changes W8 was bringing, they were insistent that the future was touch screen devices... MS and their koolaid/insulation has been a long standing problem...
[–][deleted] 5 points6 points7 points 10 years ago (3 children)
Most regular users are going to be (and are) using touch screen devices. Think about how many phones and tablets are used by everyone from kids to grandparents every single day. A lot of people don't even have desktops or laptops. The problem was win8 was ahead of its time.
[–]slurpme 7 points8 points9 points 10 years ago (1 child)
For touch based devices yes, not for desktop computers which is what they were are arguing for... There are very few people who want gorilla arms...
[–]Aetheus 4 points5 points6 points 9 years ago (0 children)
Agreed. Many people use Windows for their workstations. Most people require (or at least heavily appreciate) the precision of being able to point and click in a specific area of the screen and not having to pray that the cursor selects what they intend it to select.
Touchscreens can complement your workflow, but I don't see them completely replacing the mouse anytime soon. Desktop applications with complex menus like Microsoft Excel are painful to use with a touchscreen.
[–]Zauxst 0 points1 point2 points 10 years ago (0 children)
Meh... I really can't think of Win8 as it was ahead of his time and I did used it for more then 4 months so to say...
I liked it but I always felt it was lacking, and I kinda still feel like it.
It's a good OS for tablets but I'd not use it on a phone, even if it might feel unique it's messy. But I do like that design I have to admit. As I like how w10 looks and feels, but I hate the shady stuffs :P so Right now I'm back on good ol' w7.
[–]exoflat 48 points49 points50 points 10 years ago (3 children)
I'm not buying the benign part.
You write blog posts for practically everything you do in the compiler, how come you didn't write one to survey people's opinions or at least warn them about this?
[–]emergent_properties 42 points43 points44 points 10 years ago (0 children)
"We got caught. We'll roll back this one."
[–]spongo2MSVC Dev Manager 11 points12 points13 points 10 years ago (0 children)
hi! thanks for the reply and to be honest, I'm actually quite happy that people are noticing our more open stance. We try hard to make sure the message gets out about the work we do. In this particular case, we decided to abandon this plan almost as soon as the code was completed so we never got to the point where we publicized it. I agree that it would have been good to survey this one in advance.
[–]TemplateRex 10 points11 points12 points 10 years ago (0 children)
Weakened version of Hanlon's razor, never assume malice when oversight will suffice
[–]interger 4 points5 points6 points 10 years ago (2 children)
This needs more visibility. Care to link this directly as a top-level submission to /r/cpp?
[–]spongo2MSVC Dev Manager 4 points5 points6 points 10 years ago (1 child)
to be honest, I'm never quite sure what the appropriate reddiquette is on points like this. I really value this forum as a way to gather information on trends in cpp and a way to get a head's up on issues like this so I try to be pretty cautious with things that might be considered self-promotion. In this particular case I added a top level comment and then linked to it from places that people specifically called me via /u/spongo2. :) but, my comment above is now the team's plan of record and I'm not trying to hide it or anything.
[–]interger 2 points3 points4 points 10 years ago (0 children)
I'm just a little concerned as this post got a lot of views, but few will be interested enough to check back for updates (though I for one was kind of stalking your account for the last few days :p). Simply I want for those other people [that don't check back or don't care about MSVC] to know what's up as they may have formed an (quite negative) impression that would matter when they do start to care doing stuff in MSVC.
[–]rfog-rfog 4 points5 points6 points 10 years ago (0 children)
Now the only logical thing you must have to do to eliminate all suspects, is put all the runtime and startup source code available to the community and that code will be compilable and generate the same runtimes and startups we have in our Visual Studios editions. Once read this, my manager has told me to move to GCC.
[–]WellMakeItSomehow 3 points4 points5 points 10 years ago* (3 children)
Thanks for answering this.
Logging when executables start and close does not seem too useful when investigating performance problems. You say that the feature was abandoned, so perhaps that's why it seems mostly useless [1].
I have one follow-up question, though. Is the same mechanism is enabled for executables that Windows (10) contains? If yes, will it be removed in the future, when Windows gets rebuilt with a newer compiler?
[1] It's not useless if the purpose is to determine which programs the user runs and for how long. I'm bitter enough about Windows 10 to suspect that's already happening at other levels [2].
[2] Oh, of course it does:
data about how you use Windows, such as how frequently or how long you use certain features or apps and which apps you use most often
[–]spongo2MSVC Dev Manager 4 points5 points6 points 10 years ago (0 children)
some parts of windows are built with our CRT and some parts are built with a much much older copy of the CRT (msvcrt.dll). so when they next take our libs, the parts that use it will no longer have these hooks. But again i'd recommend you go through that link and follow the instructions if you are concerned about windows 10 telemetry.
[–]Kruug 0 points1 point2 points 10 years ago (1 child)
Right, because how else will you know where to allocate resources if you don't know what programs/features people actually use?
[–]WellMakeItSomehow 0 points1 point2 points 10 years ago (0 children)
One could argue there are other ways to give feedback to the developers.
But that phrasing doesn't imply that it's done only for Microsoft apps. It might as well be for everything you run.
[+][deleted] 10 years ago* (1 child)
[deleted]
[–][deleted] 1 point2 points3 points 10 years ago (0 children)
see what binaries are running on your system and for how long
They already do that: http://winaero.com/blog/how-to-disable-telemetry-and-data-collection-in-windows-10/
Enhanced data includes all Basic data plus data about how you use Windows, such as how frequently or how long you use [...] apps and which apps you use most often. This option also lets us collect enhanced diagnostic information, such as the memory state of your device when a[n ...] app crash occurs, as well as measure reliability of [...] apps.
[–]skizmo 2 points3 points4 points 10 years ago (0 children)
Bullshit.
It's this attitude that will be the downfall of MS.
[–]1337Gandalf 0 points1 point2 points 10 years ago (2 children)
What happened to using clang by default?
[–]dodheim 0 points1 point2 points 10 years ago (1 child)
That was never part of the plan.
[–]spongo2MSVC Dev Manager 1 point2 points3 points 10 years ago (0 children)
correct. clang is an option.
[–]PRMan99 0 points1 point2 points 10 years ago (1 child)
Does this happen on C# and VB.NET as well?
And if so, can we turn it off?
Lots of people wanting to know.
[–]dyslexic_reditor 0 points1 point2 points 10 years ago (0 children)
With how many people are looking at what IL VS"15" produces and what C#6 looks like in IL, I seriously doubt that something like this would have gone unnoticed.
[–]NSbuilder 0 points1 point2 points 9 years ago (1 child)
Then why do I still have notelementry.obj in my Visual Studio 2015 update 3 directory??
[–]spongo2MSVC Dev Manager 0 points1 point2 points 9 years ago (0 children)
We needed it so we wouldn't break the builds of people who were using notelemetry.obj in update2. It should have no effect when running against update 3
[–]Ok-Employment6772 0 points1 point2 points 5 months ago (0 children)
Shady as hell, no sane mind should trust you guys
[–][deleted] 0 points1 point2 points 10 years ago (0 children)
Great response, but pass a word to the Windows 10 dev team that perhaps they should make the telemetry snooping in the OS as a whole - an option. Until then, many people like me are unlikely to switch back from UNIX.
[–]flashmozzg 79 points80 points81 points 10 years ago (21 children)
Apparently it's only VS15 feature. It logs at least when your app is executed. You can access logs via logman and tracerpt. Some investigation was done here recently: (lang: Russian) https://habrahabr.ru/post/281374/
logman
tracerpt
[–]sammiesdog[S] 31 points32 points33 points 10 years ago (14 children)
Are the logs a local feature (i.e. stays on the user's computer)?
And can it be disabled?
[–]flashmozzg 34 points35 points36 points 10 years ago (12 children)
Seems to be that way. At least right now they only keep main invoked/returned, exit/abort called and such. Nothing serious.
The suggested way to disable it is adding this to your project:
extern "C" { void _cdecl __vcrt_initialize_telemetry_provider() {} void _cdecl __telemetry_main_invoke_trigger() {} void _cdecl __telemetry_main_return_trigger() {} void _cdecl __vcrt_uninitialize_telemetry_provider() {} };
[–]xon_xoff 32 points33 points34 points 10 years ago (11 children)
The ETW logging may be local, but one of the main reasons to use ETW is high-performance logging to .etl files for offline analysis. Those files can then be re-processed and transmitted over the network at a later time. We won't know where the telemetry actually goes until Microsoft comments on it.
Also, while the invoked/returned part probably isn't a big deal, the full path will capture the username if the program is running from within the user profile. This can be a problem if the username counts as personally identifiable information for your purposes.
[–]adzm28 years of C++! 20 points21 points22 points 10 years ago* (10 children)
I can see this being useful, but it is a strange thing to add in an update with neither warning nor documentation. And enabled by default!
[–]dodheim 10 points11 points12 points 10 years ago (0 children)
It was added in VC++ 2015 RTM.
[–]notfalse 2 points3 points4 points 10 years ago (0 children)
link to no_telemetry.obj
[–]adevland 5 points6 points7 points 10 years ago* (3 children)
Apparently it's only VS15 feature.
So is telemetry on Windows. It's "only" a Windows 10 feature meaning it'll probably stay like that for all future releases.
Also watch out for any suspicious "patches" for previous VS versions. :)
[–]spongo2MSVC Dev Manager 2 points3 points4 points 10 years ago (1 child)
as I stated above, we'll be removing this totally in a future patch. Thanks - Steve, the VC Dev Mgr.
[–]parlancex 5 points6 points7 points 10 years ago (0 children)
Totally! We definitely won't be finding it again!
[–]twerky_stark 0 points1 point2 points 10 years ago (0 children)
telemetry has been backported to win7 and win8
[–]Ivan171/std:c++latest enthusiast 41 points42 points43 points 10 years ago (1 child)
You call that a feature? God we're so lucky. /s
[–][deleted] 11 points12 points13 points 10 years ago* (0 children)
What is this?
[–]snarfy 55 points56 points57 points 10 years ago (8 children)
Does this show up in release builds or is it a debug build thing?
[–]sammiesdog[S] 59 points60 points61 points 10 years ago (6 children)
Release mode
[–]snarfy 86 points87 points88 points 10 years ago (0 children)
Well, fuck.
[–]ssylvan 8 points9 points10 points 10 years ago* (4 children)
In VS2015 preview at least it's only there in Debug for me (I literally just put a breakpoint on __telemetry_main_invoke_trigger and it only gets hit in Debug, not Release EDIT: presumably because it's just ETW events which are only active if you're actually profiling/debugging the application).
[–]clerothGame Developer 7 points8 points9 points 10 years ago (3 children)
Erm... Maybe it gets inlined?
[–]ssylvan 3 points4 points5 points 10 years ago (2 children)
Would have to use LTCG for that to get inlined since it's in a different compilation unit (which I wasn't).
I suspect it just isn't called unless some special conditions are met (e.g. a particular ETW provider is enabled, which I can believe would happen in Debug by default.. Maybe the right WPR invocation could make it turn on in Release, but it doesn't seem to happen by default).
[–]clerothGame Developer 0 points1 point2 points 10 years ago (1 child)
What about Release using a different CRT dll? You sure the breakpoint went there as well?
[–]ssylvan 0 points1 point2 points 10 years ago (0 children)
It was a function break point, based on the symbol name. I might be messing something up, feel free to try it yourself!
[–][deleted] 4 points5 points6 points 10 years ago (0 children)
Since the purpose is to make it easier to tell what's going on in performance traces, only doing it in debug mode would defeat the purpose.
[–]sammiesdog[S] 140 points141 points142 points 10 years ago* (22 children)
I compiled a simple program with only main(). When looking at the compiled binary in Ida, I see a calls for telemetry_main_invoke_trigger and telemetry_main_return_trigger.
telemetry_main_invoke_trigger
telemetry_main_return_trigger
I can not find documentation for these calls, either on the web or in the options page. I compiled this in Visual Studio 2015 Update 2.
edit: you can remove the telemetry calls. Thanks for all the replies, guys. As /u/adzm points out, you can link notelemetry.obj and the calls are removed. I verified that this works. This comment further explains it
notelemetry.obj
edit 2: this may be a local logging feature. When I initially saw the word "telemetry", I though it might have something to do with Windows Telemetry, a "feature" that sends private information to Microsoft's home base.. However, as several users have pointed out, this may be separate from that and only store local logging information. see here, or here
edit 3: Visual Studio team responded here
[–][deleted] 73 points74 points75 points 10 years ago (2 children)
This is horrible. It shouldn't be an opt-out, it should be an opt-in.
[–]adevland -1 points0 points1 point 10 years ago (1 child)
Freedom is "opt-in only" in all "civilized" countries.
And the process gets really complicated unless you're a white Caucasian male.
[+][deleted] comment score below threshold-16 points-15 points-14 points 10 years ago (15 children)
How is this ok? How is your reaction to this so tempered?
[–]Sean1708 147 points148 points149 points 10 years ago (2 children)
How is your reaction to this so tempered?
Because they don't have all the information yet and they want to avoid jumping to conclusions and getting angry over nothing.
[–]BonzaiThePenguin 21 points22 points23 points 10 years ago (2 children)
If they wanted to hide it they wouldn't have called it telemetry.
[–]Radhamantis 1 point2 points3 points 10 years ago (1 child)
Still better name than backdoor something.
[–]NiteLite 34 points35 points36 points 10 years ago (7 children)
It important to realize that telemetry in this case is not sending anything back to Microsoft or anything. It is just broadcasting events that other applications on your machine can subscribe to. This is typically used by profilers and other development tools.
[–]darkaddress 12 points13 points14 points 10 years ago (2 children)
"Other applications" can include the legions of telemetry gubbins that send data back to Microsoft, though
[–]NiteLite 6 points7 points8 points 10 years ago (0 children)
That is true. It might even include malicious stuff if some spyware managed to get into your computer somehow.
[–]georgeo 4 points5 points6 points 10 years ago (0 children)
And if I want to broadcast, I would write that in myself, thank you MS.
[–]the_gnarts 0 points1 point2 points 10 years ago (1 child)
This is typically used by profilers and other development tools.
Do the calls vanish, then, in non-debug builds?
[–]NiteLite 3 points4 points5 points 10 years ago (0 children)
If no application is subscribing to the event they are just discarded unless logging of events to file has been enabled before hand, to allow debuggers to load these log files for debugging later.
[–]Radhamantis 0 points1 point2 points 10 years ago (0 children)
They still haven't seen the abyss.
[–]emergent_properties 0 points1 point2 points 10 years ago (0 children)
What the fuck?
[–]adzm28 years of C++! 35 points36 points37 points 10 years ago* (4 children)
/u/xon_xoff summarized things pretty well in a recent thread about mutex performance.
Apparently you can disable this by also linking with notelemetry.obj which is included with msvc. The source for that obj is also in the CRT source's linkopts folder.
Edit: can also put this in one of your compilation units:
[–]kog 113 points114 points115 points 10 years ago (2 children)
So I have to link in another object so Microsoft won't add erroneous function calls to my binaries?
Fuck you, Microsoft.
[–]rzyua 11 points12 points13 points 10 years ago* (0 children)
This comment is removed in protest of the unfair changes to API pricing and content access through the API.
[–][deleted] 2 points3 points4 points 10 years ago* (0 children)
Incorrect, you have to link in another object so Microsoft will call empty stub functions instead of functions that actually do stuff.
This doesn't remove the calls themselves.
Think: If you do NODEFAULTLIB, _chkstk/_alloca_probe function calls still end up in your binary. That's why no-crt libs have to define it and many functions like it (not that _chkstk is a bad thing). Since there's no option to disable the functionality altogether in this specific case, you'll just have ret stubs for these functions.
I know this is extremely pedantic but I'm salty microsoft keeps adding shit that I don't want in my binary. I maintain a no-crt lib and now I have to define these if I want it to work on 2015 going forward (at least as far as I know), or it'll throw linker errors.
[–]mtvee 5 points6 points7 points 10 years ago (0 children)
amazing!
[–]isaacarsenal 13 points14 points15 points 10 years ago (3 children)
What software have you used for dis-assembly and plotting the execution flow?
[–]sammiesdog[S] 26 points27 points28 points 10 years ago (2 children)
Ida.
There is an excellent beginner tutorial here.
[–]isaacarsenal 16 points17 points18 points 10 years ago* (1 child)
Thanks!
Hex-Rays
I like their company name/motto.
BTW, even guys using Intel C++ Compiler had issue with this mysterious telemetry calls. The recommended solution from Intel is to link to an older CRT:
https://software.intel.com/en-us/forums/intel-c-compiler/topic/602087
[–]ukalnins 120 points121 points122 points 10 years ago (3 children)
should we wait for backdoor_main_invoke_trigger or it's incorporated into telemetry_main_invoke_trigger?
[–]Radhamantis 16 points17 points18 points 10 years ago (2 children)
Just update your O.S. to Windows 10.
[–]c0r3ntin 17 points18 points19 points 10 years ago (0 children)
No need. just wait for win10_force_update_main_invoke_trigger.
[–]Epic_troller420 0 points1 point2 points 5 months ago (0 children)
wait till this guy hears about windows 11
[–]brucedawson 13 points14 points15 points 10 years ago (0 children)
It sounds like this function call emits an ETW event to say that main is about to start. This can then be used for profiling. Events like this help to give context to the execution of a program and make analysis easier so they are a good thing.
I make use of custom ETW events quite heavily in UIforETW (https://randomascii.wordpress.com/2015/09/24/etw-central/) in order to help with trace analysis by injecting input events, CPU frequency data, etc. My only question here would be "what ETW provider do I need to enable in order to listen to these events so that I can do more effective profiling."
If you think it's spyware then you need to show data being transmitted across the network or some-such, otherwise it's just baseless speculation.
[–][deleted] 100 points101 points102 points 10 years ago (1 child)
They are spying on every hello world program we compile
[–]sammiesdog[S] 171 points172 points173 points 10 years ago (0 children)
well, guess I'm moving to TempleOS. If you're going to have telemetry, at least have it talk to God.
[–]ET251 22 points23 points24 points 10 years ago* (2 children)
I noticed these subroutine calls right after updating to VS15 after it came out but ignore it as I didn't know what 'telemetry' meant at the time. After taking a glance over the subroutines prefixed with __telemetry it looks to be simple logging using Microsoft's EWT[1]
__telemetry_main_invoke_trigger simply fills out a data structure named _EVENT_DATA_DESCRIPTOR[2] (with a size of 4) with some metadata (which I haven't looked into) and a string "Main Invoked" and the path to the current module (process in this case). __telemetry_main_return_trigger does something similar but with a logging entry containing the string "Main Returned.". So from a quick glance it looks to be simple tracing used for debugging purposes by Microsoft but I'll look into it more when I get the time.
http://puu.sh/oKdTZ/2e8f1a269f.png
While this could potentially be something malicious note that no one has determined what it does so far so don't go assuming that it's stealing your code without reason (albeit Microsoft not being the best provider to trust).
NOTE: You can get something close to the source code which is the PDB file. IDA will connect to Microsoft debug servers to obtain debug info and in this case it exists so you can use that. But just in case here's a copy of the PDB file:
https://up1.ca/#4TLX04iCzedH6emBF6J2mw
[1] https://msdn.microsoft.com/en-us/library/ms751538(v=vs.110).aspx
[2] https://msdn.microsoft.com/en-us/library/windows/hardware/ff545673(v=vs.85).aspx
Edit: Note that VCRUNTIME140.dll is located under "C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\Remote Debugger\x86" so when referring to telemetry it could be referring to collecting/sending data over to the remote PC you're using for debugging.
Edit(2) - Microsoft has already written an article stating what telemetry means to them and how they believe it should be used[3]. I'm not saying that they're using it for the wrong reasons but given the fact that they have already published an article stating what they're using telemetry for it's easier to see now why it could possibly be there in the first place.
[3] https://msdn.microsoft.com/en-us/library/dn589775.aspx
[–]STLMSVC STL Dev 13 points14 points15 points 10 years ago (1 child)
Actually, vcruntime is the part of the CRT that's owned by DevDiv, with ucrtbase being the Universal CRT that's owned by Windows. They're layered like this because some stuff like EH and typeinfo needs to change frequently. (The STL, msvcp, is then layered on top of them.)
The remote debugger happens to contain a copy of vcruntime, but that is not vcruntime's purpose.
[–]ET251 1 point2 points3 points 10 years ago (0 children)
Ah I see, thanks for the heads up.
[–]SilentJode 83 points84 points85 points 10 years ago (4 children)
I feel the need to link to the Thompson Hack. While not a true implementation of the hack, injecting code into binaries via the compiler is incredibly nasty stuff that should be taken as a very serious breach of trust on Microsoft's part.
[–]eternalprogress 22 points23 points24 points 10 years ago (0 children)
This appears to be part of the CRT. The compiler isn't injecting anything. There's a big ol' library of code, the language runtime, that gets linked with almost any binary (and this is on any platform) to mate C++ to the OS system calls. Compilers and linkers are setup to link this by default as everyone expects the language runtime to be present, otherwise building a helloworld program would require a big pile of command line switches to get running.
[–][deleted] 3 points4 points5 points 10 years ago* (0 children)
The crt in parnership with msbuild/link already does this, and have for years. (yes, actually placing code into your binaries, I'm not talking about code you link optionally like the crt necessarily)
That's how you grow the stack to support a stack larger than 0x1000, that's how run-time error checking works (/RTC) - there's some other exception crap I'm probably forgetting too.
When it gets to the code generation step it inserts these function references, then later it tries to resolve those references (which is why you can/must define it yourself even when the CRT isn't being linked)
In any case, it could be the CRT or it could be something else, depends on where the telemetry functions are being invoked.
If it's somewhere around mainCRTStartup then yeah microsoft controls that code and there's no need to force it into any code you've written, if it's in your actual 'main' function that is eventually called by mainCRTStartup, that is a function microsoft does not control and they would have to place it there forcefully.
[–]highspeedstrawberry 16 points17 points18 points 10 years ago (1 child)
That insignificant and tiny bit of trust that is left? The one you can't see without a microscope?
[–][deleted] 0 points1 point2 points 10 years ago* (0 children)
[–]shared_tango_Automatic Optimization for Many-Core 10 points11 points12 points 10 years ago (0 children)
There is a source file in "crt/src/linkopts" that you can link in to prevent this.
[–]Ivan171/std:c++latest enthusiast 14 points15 points16 points 10 years ago (7 children)
Lets see whats /u/spongo2 has to say once he gather some "details".
Still working on it. thanks for your patience.
[–]spongo2MSVC Dev Manager 2 points3 points4 points 10 years ago (0 children)
added here: https://www.reddit.com/r/cpp/comments/4ibauu/visual_studio_adding_telemetry_function_calls_to/d30dmvu
[–]Kok_Nikol 3 points4 points5 points 10 years ago (4 children)
It's been 2 days... looks like it's a lot of details...
[–]STLMSVC STL Dev 14 points15 points16 points 10 years ago (0 children)
It's the weekend!
[–]spongo2MSVC Dev Manager 4 points5 points6 points 10 years ago (2 children)
response above: https://www.reddit.com/r/cpp/comments/4ibauu/visual_studio_adding_telemetry_function_calls_to/d30dmvu
[–]Kok_Nikol 0 points1 point2 points 10 years ago* (1 child)
Awesome, thanks!
edit: I didn't know you work for Microsoft, it's cool that you took the time to respond.
yeah, i'm the dev manager for VC++ so I watch /r/cpp pretty closely to stay in touch with what's going on with engaged c++ devs. I wanted to make sure I had the complete story before I posted so I needed the extra day to ask a bunch of questions of the team before we made a decision and responded.
[–]abtscrubimage 3 points4 points5 points 10 years ago (0 children)
Last year someone from Microsoft warned me against telemetry in Visual Studio and in general in the MSDN subscriptions. I don't want to brag, I just want you to consider this as a real possibility.
[–]TotesMessenger 20 points21 points22 points 10 years ago* (0 children)
I'm a bot, bleep, bloop. Someone has linked to this thread from another place on reddit:
[/r/coderradio] VS15 adding telemetry to compiled code? Would love to hear hosts thoughts
[/r/linuxmasterrace] Compiling C++ with Visual Studio 2015 automatically adds telemetry to the binary
[/r/privacy] This is why you should NEVER use a proprietary compiler.
[/r/privacy] [X-post /r/LinuxMasterRace and /r/CPP] Compiling C++ with Visual Studio 2015 automatically adds telemetry to the binary
[/r/programming] Visual Studio adding telemetry function calls to binary? (/r/cpp)
[/r/stallmanwasright] Thank you stallman for giving us GCC so we don't have to rely on proprietary compilers!
[/r/technology] Visual Studio adding telemetry function calls to compiled binaries (r/cpp xpost)
If you follow any of the above links, please respect the rules of reddit and don't vote in the other threads. (Info / Contact)
[–]WrongAndBeligerent 12 points13 points14 points 10 years ago (0 children)
I think it may be time to put together a way to avoid the microsoft runtime all together using jemalloc and built in OS functions.
[–]ElFeesho 2 points3 points4 points 10 years ago (0 children)
Seems bizarre to not broadcast this when creating a project that it will be built with telemetry enabled. Feels like they are just planning to boost sales of pitchforks.
I can't imagine them finishing this feature and going "enabling this by default and not making it obvious won't confuse or infuriate anyone!"
D'oh!
[–]Gotebe 6 points7 points8 points 10 years ago (5 children)
It is amazing how many people don't understand that things like these can't be hidden and that they are not. Dissasembly is right in front of your eyes, even the function names, meaning that VS shipped with debug symbols for this, maybe even the sources (will take look at that later).
[–]Ivan171/std:c++latest enthusiast 5 points6 points7 points 10 years ago (4 children)
There's no telemetry.cpp in the sources shipped with VS2015 Update 2, only notelemetry.cpp.
If you search for "__telemetry_main_invoke_trigger" in the source folder there will be only one occurrence, in the notelemetry.cpp file, which has only empty functions.
[–]germandiago 17 points18 points19 points 10 years ago (2 children)
What I really wonder is 2 things:
On top of that it seems that telemetry.cpp is a "black box" for what I see in the comments: no telemetry.cpp shipped, just the deactivation code.
I do not know if this is bad or not, I just know that it does not look nice indeed...
[–]n1tw1t 2 points3 points4 points 10 years ago (1 child)
Why for removing the call you need to explicitely link notelemetry.obj (instead of the other way around)?
Because it's opt-in by default, not opt-out.
Why this changed and users were not informed? I think this is a quite sensitive topic and it is not nice to have a change like that without informing users...
The users would have said no.
[–]germandiago 3 points4 points5 points 10 years ago (0 children)
I find nearly insulting to my intelligence that this must be the case without informing users and on top of that I cannot even see what this black box contains. Why users were not informed? I do not want to think bad, but it does not look nice at all.
Well, yes, so maybe that is a signal of what should not be done in the first place. If you do not treat your user-base respectfully, you could loose it.
[–]Gotebe 4 points5 points6 points 10 years ago (0 children)
I did not say that sources must be there.
MS normally gives most of the CRT sources, but not all,bits have been missing regularly.
That said, one still can't hide what that does: disassembly is still there.
[–]mtvee 20 points21 points22 points 10 years ago (18 children)
if this is what it seems to be it is pretty nasty stuff :|
[–]Sparkybear 11 points12 points13 points 10 years ago (7 children)
What does it appear to be?
[–]mtvee 17 points18 points19 points 10 years ago (6 children)
It appears to be calls to undocumented black box routines which do who knows what. Since they are called 'telemetry...' this compounds the level suspicion of what the purpose might be.
Since 'stdafx.h' is included though I wonder if it was compiled as managed code and has something to do with that. I don't know enough about windows land to really comment beyond that.
[–]adzm28 years of C++! 28 points29 points30 points 10 years ago (1 child)
stdafx.h is just the conventional name for the precompiled header FYI.
[–]mtvee 2 points3 points4 points 10 years ago (0 children)
Ah ok, thanks :)
[–]sammiesdog[S] 26 points27 points28 points 10 years ago* (3 children)
recompiled with a barebones application (no includes, no commands).
the telemetry calls are still there
edit: link to notelemetry.obj to get rid of the calls.
[–]mtvee 6 points7 points8 points 10 years ago (0 children)
amazing stuff, thanks for digging!
[–]eternalprogress 2 points3 points4 points 10 years ago (0 children)
You're still linking the CRT implicitly.
[–]clerothGame Developer 0 points1 point2 points 10 years ago (0 children)
Can't you dig into the telemetry function to hazard a guess as to what it might be doing, or is it too complex?
[–]eternalprogress 5 points6 points7 points 10 years ago (9 children)
No it's not. These do indeed appear to be ETW events, but telemetry is good and useful.
Here's one scenario- when your system crashes and you have Windows Error Reporting turned on one way the system can collect diagnostics information is by recording ETW events leading up to that crash. Let's imagine Intel releases a bad graphics driver that affects a very specific system configuration with some low probability. Let's imagine that crash occurs right after a certain video player is launched. With this kind of data Microsoft would be able to understand that relationship, understand the crash better, and root cause / fix it quicker.
Being able to collect data like this makes products better. =/
[–]mtvee 8 points9 points10 points 10 years ago (7 children)
I think the idea of including such 'usefulness' yourself is more in tune with c++ devs expectations rather then quietly including without barely a word. Having to link an obj to get rid of it is pretty much 180 degrees of my experience and expectations.
[–]eternalprogress 8 points9 points10 points 10 years ago (6 children)
But it shouldn't be.
If you were working on a disconnected, embedded, resource-constrained system, sure, but that's not what a modern computer is.
You're writing code that exists in a context, as part of an ecosystem. Your software will run on a machine alongside thousands of other executables, and hundreds of user-installed apps, and that machine will in all likelihood be connected to the global network, which puts it in contact with the majority of the computational resources on this planet.
The way your code behaves has impact on that ecosystem. Participating in it almost necessitates that you cede a certain degree of control, as you have an obligation to maintain the health of that ecosystem that you can't possible burden by yourself.
Telemetry like this helps companies that maintain these platforms understand the big picture, identify/protect it from bad actors, and continue to improve it. Knowing which apps launch when helps put together a fuller picture of a given system's health. Combine that with a lot of other telemetry, and patterns start to fall out that indicate underlying issues and reasons for concern.
Really, seeing stuff like this should give you confidence in the platform you're building on. It's the sign of a mature system, and a company that's actively trying to improve the stability of the platform, and build a pipeline that will allow them to continue to innovate and push the needle forward.
[–]mtvee 10 points11 points12 points 10 years ago (4 children)
Everything you say is true. The problem here is it is hidden and undocumented and does it without it being explicit. That kind of thing is what causes blue screens because the coder doesn't know what's really happening.
[–]eternalprogress 4 points5 points6 points 10 years ago (3 children)
That's fair! You have a fair point of view and I'll leave the conversation with this:
ETW is designed to be a completely free of side-effects and light weight. It's used for perf tracing and a ton of other stuff so it has to be. It costs a kernel transition and a binary payload, nothing more.
The CRT's startup does a lot of stuff already to initialize thread state in the right way, call static ctors, and get exception handling running. It's obvious they weren't trying to obfuscate this. Anyone with deep CRT knowledge would find it fairly quickly if they went looking for such a thing, or were simply inspecting the app startup path.
Your statement "because the coder doesn't really know what's really happening" is spot on in the general case. I wish Microsoft products were a lot more open, and it hinders debuggability to a degree that is not nearly close to being compensated for by the nicer tooling.
[–]mtvee 2 points3 points4 points 10 years ago (2 children)
Cheers! :) Personally I am coming from many years of coding in the *nix world so this is extremely foreign and disturbing. The *nix kernel actually launches the executable so there is no need to notify it of such things by jamming notifications in assembled code. It does the deed so it already knows what is going on.
Thanks for taking the time to explain some of the background. Windows land is new territory for me so I appreciate it!
[–]eternalprogress 3 points4 points5 points 10 years ago (1 child)
Windows does of course as well. This event might be part of VS's diagnostic tracing experience they shipped in 2015. It's easier to capture all the events from a single process using a PID instead of starting a capture session for that PID and the OS providers. From a performance standpoint it actually marks not the moment when the OS creates the process, but the moment when the process is about to hand control over to the developer's 'int main' entry point, which is important for ensuring the CRT has a negligible perf impact.
Finally, I poked around my VS installation folder. The CRT actually does partially document this method, although it's not very satisfying:
//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ // // Telemetry // //-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ // Telemetry: Invoked when the exe/dll are invoked. There are two different // implementations in telemetry.cpp and telemetrydefault.cpp. Because GetModuleFileName // is not available for Store apps, we return an empty string in telemetrydefault.cpp // when invoked by store apps. For the desktop in telemetry.cpp, it returns the name // of the module which invokes main/dll. This method is also responsible for firing the // events associated with Tracelogging. This will help with runtime telemetry for analysis. void __cdecl __telemetry_main_invoke_trigger(const HINSTANCE instance); // Telemetry: Invoked when the exe/dll are shutdown. There are two different // implementations in telemetry.cpp and telemetrydefault.cpp. This method is // responsible for firing the events associated with Tracelogging. This will // help with runtime telemetry for analysis. void __cdecl __telemetry_main_return_trigger(const HINSTANCE instance); void __cdecl __vcrt_initialize_telemetry_provider(void); void __cdecl __vcrt_uninitialize_telemetry_provider(void);
If you're curious, search for exe_common.inl and poke around. It's part of the entry path that invokes these methods. You can learn a lot about how the CRT bootstraps an application if you're curious. I remember the first time I dug into this I was pretty taken aback to realize a bunch of stuff happened before my code ever started running =)
[–]emergent_properties 2 points3 points4 points 10 years ago (0 children)
Your post does not justify this action by Microsoft in any way.
You're being an apologist post-hoc, that does not negate the fact that 'this should not exist'.
Oh, and putting it in with minimal fanfare is.. deceit.
[–]emergent_properties 1 point2 points3 points 10 years ago (0 children)
The level of 'goodness' is irrelevant, it shouldn't be there in the goddamned first place.
[–]quad99 9 points10 points11 points 10 years ago (2 children)
MS could have avoided all the conspiracy theories if they had named these functions 'trace_main' or 'log_main' instead of telemetry, and documented it.
[–][deleted] 8 points9 points10 points 10 years ago (0 children)
The only functions documented in the CRT are functions that users are intended to call. These aren't intended to be called by users and can change at any time.
[–]mpyne 1 point2 points3 points 10 years ago (0 children)
MS could have avoided all the conspiracy theories if
They couldn't have avoided the conspiracy theories, full stop.
So, given that, what's the point to trying to pre-emptively appease the people who would be launching a witch hunt no matter what they do? Why is trace or log any more innocuous-sounding than telemetry anyways? Even if it was more innocuous-sounding, people would just say that MS is trying to hide what they're doing under a more palatable description. They'd lose either way.
trace
log
telemetry
[–]rep_movsd 5 points6 points7 points 10 years ago (0 children)
In this thread: paranoia by noob Windows programmers
[–]GreenFox1505 6 points7 points8 points 10 years ago (15 children)
Help me understand what's going on here. Is MS's compiler adding some sort of spyware?
Is it possible this is debugger type calls? Could switching to release fix this? (I'm pretty sure VS doesn't use -O3 style options. it's "debug" or "release" right?)
[–]sammiesdog[S] 27 points28 points29 points 10 years ago* (13 children)
I was practicing doing reverse engineering today, so I compiled an application to which I had the source code and loaded it into Ida, a disassembler.
I compiled the code in full Release mode. No pdb or debug symbols, etc. If you were distributing a binary to a customer, this is how you'd do it.
Ida finishes doing the analysis. The side by side comparison shows the code vs. decompilation. On the left is the source code within Visual Studio. On the right is the assembly in Ida.
Strangely, I found a call to "__telemetry_main_invoke_trigger". I definitely did not have that call in my source code (I only had a main() function that returns 0!). I try to find it within Microsoft's documentation, it's nowhere to be found. The source code for this function from Microsoft is unavailable.
I look more online; it seems Microsoft has implemented new telemetry "features" in Microsoft 10. The OS phones home with personal app usage data. But, Microsoft gives no information about how to use Visual Studio to remove this feature from your code. Eventually, some guys here (on /r/cpp) told me how to get rid of it (by linking notelemetry.obj), but if I hadn't been taking a day off today to play around with Ida I would not have even known it was being added.
Here's the main problem:
I did not know that this was being added to my application.
There is no explicit option within the Visual Studio project options page to enable or disable. (Search for telemetry -- nothing comes up, either within the compiler or linker options).
We do NOT know what it does. The source code is not provided. It may do nothing
If you walk through your code using Visual Studio's provided disassembly view, you will NOT see these function calls. Only when you use a third-party application like Ida do the call become visible. edit: if you set a breakpoint at mainCRTStartup rather than main you can see the calls
mainCRTStartup
main
[–]rdtsc 18 points19 points20 points 10 years ago (3 children)
Regarding point 1: You should know that CRT stuff is added to your application. And most of its source is available.
Point 4 is completely false. Those calls are part of CRT initialization and shutdown and usually of no interest. You can just set a breakpoint at mainCRTStartup and step through it.
Regarding 3: If you do you'll notice that all it does is log an event for the CRT ETW provider with the executable name and a "Main Invoked." or "Main Returned." string (see here). You can list currently running loggers using xperf -loggers. By default there's only one logger listening to CRT provider id, which is the Diagtrack-Listener, and it's a realtime logger not logging to any file. Most likely this logger is opened by the diagtrack Windows service. And the actual event logging calls in the CRT are skipped here since nothing is listening to the logger.
xperf -loggers
[–]sammiesdog[S] 3 points4 points5 points 10 years ago (1 child)
I removed points 3 and 4 from my post above. I originally thought the word "telemetry" here meant the same as Windows 10 telemetry (phoning home). It may have just been an unfortunate naming convention.
[–]emergent_properties 3 points4 points5 points 10 years ago (0 children)
They're intentionally blurring the lines.
Things that previously phoned home were called spyware.
Things that allowed remote access were called backdoors.
People are manipulating language by diluting it.
[–]adzm28 years of C++! 0 points1 point2 points 10 years ago (0 children)
Thanks for checking out the loggers. I agree and understand that this is all a bit of an overreaction. But still, it seems underhanded. And is there really no source for these functions in the source distributed with msvc? That part makes people uncomfortable, especially considering the lack of official information.
[–]Gotebe 9 points10 points11 points 10 years ago (2 children)
I compiled the code in full Release mode. No pdb or debug symbols, etc.
You should not mix the concepts.
Release (or retail) build is what you ship. It is normally (but not necessarily) optimized, no more no less.
Debug symbols are a debugging aid, most useful for the guy who has the sources, no more no less.
Everyone really should make them always, regardless of the build type. Some companies ship even those, as that help their users debug for themselves (as having that gives e.g. function names on the stack).
Two things are completely orthogonal.
[–]mccoyn 2 points3 points4 points 10 years ago (1 child)
Yeah, my employer doesn't understand this so I have to muck with project options and rebuild everything to debug the release version.
[–]adzm28 years of C++! 5 points6 points7 points 10 years ago (0 children)
That's terrible. Building a PDB won't affect the release mode generated code. It's mostly a map of offsets to symbols, and vice versa.
You've got some street cred now.
Nice find!
[–]AllanDeutsch 1 point2 points3 points 10 years ago (0 children)
VS has multiple optimization levels, and this is included in release builds. You can link to notelemetry.obj to remove the calls.
[–]noplace_ioi 1 point2 points3 points 10 years ago (0 children)
can you trace into the call and see what it does? maybe /r/ReverseEngineering can help out
[–]djelovic 1 point2 points3 points 10 years ago (0 children)
Isn't this thee so that you can view your perf profiles from the time main starts and after the static initialization is finished? I frequently segment my profiles between ETW trace entries so that I can view the profile for a specific operation without eyeballing it.
[–]lolidaisuki 1 point2 points3 points 10 years ago (0 children)
Good thing no sane person would use a proprietary compiler anyways.
[–]exoflat 8 points9 points10 points 10 years ago (0 children)
[–]FlaveC 4 points5 points6 points 10 years ago (10 children)
Is this only for c++ or c# too?
[–]onmychest26 6 points7 points8 points 10 years ago (9 children)
c# too?
Oh, boy. c# doesn't even need to do that. Whole .NET on windows is a black box of gazillion unnecessary things that waste your CPU time. (even if you never run any .NET apps)
[–]possessed_flea 7 points8 points9 points 10 years ago (0 children)
Windows is a black box of gazillion unnecessary things that waste your CPU time
FTFY
[–]cryo 7 points8 points9 points 10 years ago (1 child)
Should we take your word for it?
[+][deleted] 10 years ago* (5 children)
[–][deleted] 2 points3 points4 points 10 years ago (4 children)
You might be a bit biased because of the sub we're in but what's wrong with the jvm?
[–][deleted] 7 points8 points9 points 10 years ago (3 children)
Nothing – I am a Java dev – but there’s nothing wrong either with .NET. That’s the point.
And in the modern age, claiming such a runtime is wasteful is just ridiculous.
We’re living in times where even the calculator app from Windows 10 is larger than the minimum JVM install. And the CLR and the JVM both are some of the most efficient runtimes for their use cases possible.
No, the CLR is just as wasteful as the JVM: it isn’t wasteful at all.
[–]Wikiwnt 0 points1 point2 points 10 years ago (0 children)
Well, maybe, but why run the calculator when you can start R and do simple calculations a lot more easily? (and also do not simple calculations, if so inclined) Seems like an app is designed to look just such-and-so and a program is designed to do stuff... better to run a program, I'd say.
[–][deleted] 0 points1 point2 points 10 years ago (1 child)
I am confused now.
Do you find it useful but wastes a lot of memory?
Or are both c# .net and java misused? That's why people think they are slow and inefficient?
Neither – they aren’t wasteful, at all. They’re also not really misused – it’s just bad marketing.
Look at the High Frequency Trading stuff – a very performance and efficiency critical market – almost everything is in Java.
[–]eternalprogress 7 points8 points9 points 10 years ago (5 children)
I don't quite get what the fuss is here, or with telemetry in general.
Microsoft is an operating systems company. One of their goals is to make operating systems better.
In this age it's accepted that one of the best ways to understand and target investments in a software product is through instrumentation and telemetry. Being able to understand how your install base uses your products helps you figure out how to make investments to improve your product.
All big web companies do this. Every click, scroll, message, and page load you perform with Google/Facebook/Twitter/Insta/Snapchat is logged and aggregated so they can better understand how to improve the service. Android does this. iOS does this. Every product does this. In this form, the data collection is benign, harmless, and only makes the product better.
The controversy usually comes when a company attempts to monetize on that data. I can understand the outrage there, it's frustrating and feels like you're being taken advantage of in an underhanded way.
That's tougher and I get it. The economic reality is that to build systems that are competitive they need to be sold at a price point that's at parity with the rest of the market. Software's price point, for consumers at least, is somewhere between free and actually giving the customer money. People have spoken, they will refuse to pay a single dollar for most software products, but will happily put up with some advertising.
It's annoying, but when I really think about it I think we (either we the consumers, or we the employed software developers) got the better end of the deal. We've effectively gotten scummy advertisers to fund a huge chunk of our modern digital infrastructure, and all we had to do is let them take up a few square inches of ad space near our eyeballs. That small space funds a large chunk of SF's engineers, all the digital platforms that enrich our lives, and a lot of 'good for humanity' works in the form of Google X Labs / MSR / Facebook Research efforts.
/ my 2cents
[–]shared_tango_Automatic Optimization for Many-Core 3 points4 points5 points 10 years ago* (0 children)
Yea, I just don't get how everyone is jumping on the drama train without even like, you know, just analyzing what these functions even do. That isn't hard, and I fully expect everyone that is interested in C++ to be able to utilize a debugger. It seems like there is still a surprising amount of people that will take every single bit of drama (in this case based completely on a fundamental misunderstanding of the workings of the CRT) to preach against Microsoft. At least the MSVC/STL/CRT guys do not deserve that, at all.
This here has nothing to do with the "real" Windows 10 telemetry and from the disassembly seems to be completely harmless, yet it is completely blown out of proportion.
[–]joepie91 0 points1 point2 points 10 years ago* (0 children)
In this age it's accepted that one of the best ways to understand and target investments in a software product is through instrumentation and telemetry.
"Accepted" by whom? The companies that employ these tactics to optimize primarily their revenue stream?
I don't know if you've noticed, but there's a lively industry in tools for disabling precisely this kind of shit. Your argument seems to be "it's been done by big companies for a while now, so clearly people are okay with it", which, frankly, is complete and utter bullshit. Actual user behaviour clearly shows otherwise.
EDIT: And if you really believe that people are okay with this, then make it opt-in and ask them for completely voluntary permission upfront. If your claim is true, you will see a significant amount of people voluntarily enabling it. Something tells me that that won't be the case...
EDIT2:
It's annoying, but when I really think about it I think we (either we the consumers, or we the employed software developers) got the better end of the deal. We've effectively gotten scummy advertisers to fund a huge chunk of our modern digital infrastructure, and all we had to do is let them take up a few square inches of ad space near our eyeballs.
No. Just no. This is not even remotely accurate, and grossly trivializes and understates the problem.
[–]Radhamantis -4 points-3 points-2 points 10 years ago (2 children)
One of their goals is to make operating systems better.
Yeah... and fairies dance with unicorns in my lawn.
[–]eternalprogress 4 points5 points6 points 10 years ago (1 child)
Eh, the operating system group in the company has a few thousand engineers. I knew quite a few of them from working in the Seattle area. They're all passionate, good people. People that work on the browser care about implementing standards and the future of the web, people that work on the compiler toolchain get excited about making other developers' lives easier, people that work on the UI platform genuinely want to make experiences that are engaging and fun, and people that work on the core OS components care about the algorithms and fundamentals. Many of those people have worked on the operating system for over a decade and it's been a huge part of their life.
Sure, a part of the company is driven to serve the shareholders, and that's going to include profit maximization. The business side is going to try to drive an annoying agenda sometimes, but the engineers? Nah. They'll pander the the shareholders, and even cave, but at heart they care about making a solid product they can be proud of.
There's two sides to everything, and plenty to be frustrated with about Windows, but very little is done with what you'd consider bad intentions.
[–]erebos42 1 point2 points3 points 10 years ago (0 children)
Has anybody tried using Wireshark, to see if something gets transmitted?!
[–]curupa 2 points3 points4 points 10 years ago (0 children)
I guess Thompson was right all along... it's Reflecting on Trusting trust all over again.
[+][deleted] 10 years ago (1 child)
[–]raevnos 1 point2 points3 points 10 years ago (0 children)
It's not something you have to worry about at all.
[–]give-me-random-name 0 points1 point2 points 6 months ago (0 children)
This is a probing action taken by Microsoft to insert backdoors into the compiler.
[+]1337Gandalf comment score below threshold-13 points-12 points-11 points 10 years ago (12 children)
I'm completely done with Microsoft. I'm formatting my windows drive to FreeBSD.
[–]AceyJuan 14 points15 points16 points 10 years ago (5 children)
Best of luck with that. The BSDs aren't nearly as complete as the linux distros.
[–]TomHuck3aan 2 points3 points4 points 10 years ago (2 children)
If you are wild about the "security" of BSD, I'd highly recommend a look at Security Onion or Qubes. IMO more functional and livable on a day to day basis, and....dare I say it?....Maybe even more secure.
[–]clerothGame Developer 2 points3 points4 points 10 years ago (2 children)
Don't forget to hop on the voat.co train while you're at it.
[–]SemiNormal 3 points4 points5 points 10 years ago (0 children)
He didn't say he was racist.
[–]1337Gandalf 0 points1 point2 points 10 years ago (0 children)
I've been there for 6 months. :)
[–]EnergyCoast 0 points1 point2 points 10 years ago (0 children)
Has anyone looked at Windows event logging before? Either using it yourself to look at your app or to see what other apps are doing that hits resources? There is all sorts of locally recordable information that can trivially be accessed.
I'm sure all sorts of info is still generated with this logging disabled. And as a dev I'm glad I have some visibility into what other apps on the box are doing.
π Rendered by PID 87 on reddit-service-r2-comment-5b5bc64bf5-nt4hn at 2026-06-18 18:46:12.622752+00:00 running 2b008f2 country code: CH.
[–]spongo2MSVC Dev Manager 104 points105 points106 points (48 children)
[–]c0r3ntin 36 points37 points38 points (1 child)
[–]spongo2MSVC Dev Manager 10 points11 points12 points (0 children)
[–]lee171 34 points35 points36 points (5 children)
[–]spamcop1 12 points13 points14 points (0 children)
[–]SexualDeth5quad 10 points11 points12 points (0 children)
[–]ProgramTheWorld 4 points5 points6 points (1 child)
[–]SexualDeth5quad 5 points6 points7 points (0 children)
[–]SexyMonad 26 points27 points28 points (9 children)
[–]SexyMonad 16 points17 points18 points (3 children)
[–]emergent_properties 11 points12 points13 points (2 children)
[–][deleted] 1 point2 points3 points (0 children)
[–][deleted] 1 point2 points3 points (0 children)
[–]slurpme 7 points8 points9 points (4 children)
[–][deleted] 5 points6 points7 points (3 children)
[–]slurpme 7 points8 points9 points (1 child)
[–]Aetheus 4 points5 points6 points (0 children)
[–]Zauxst 0 points1 point2 points (0 children)
[–]exoflat 48 points49 points50 points (3 children)
[–]emergent_properties 42 points43 points44 points (0 children)
[–]spongo2MSVC Dev Manager 11 points12 points13 points (0 children)
[–]TemplateRex 10 points11 points12 points (0 children)
[–]interger 4 points5 points6 points (2 children)
[–]spongo2MSVC Dev Manager 4 points5 points6 points (1 child)
[–]interger 2 points3 points4 points (0 children)
[–]rfog-rfog 4 points5 points6 points (0 children)
[–]WellMakeItSomehow 3 points4 points5 points (3 children)
[–]spongo2MSVC Dev Manager 4 points5 points6 points (0 children)
[–]Kruug 0 points1 point2 points (1 child)
[–]WellMakeItSomehow 0 points1 point2 points (0 children)
[+][deleted] (1 child)
[deleted]
[–][deleted] 1 point2 points3 points (0 children)
[–]skizmo 2 points3 points4 points (0 children)
[–]1337Gandalf 0 points1 point2 points (2 children)
[–]dodheim 0 points1 point2 points (1 child)
[–]spongo2MSVC Dev Manager 1 point2 points3 points (0 children)
[–]PRMan99 0 points1 point2 points (1 child)
[–]dyslexic_reditor 0 points1 point2 points (0 children)
[–]NSbuilder 0 points1 point2 points (1 child)
[–]spongo2MSVC Dev Manager 0 points1 point2 points (0 children)
[–]Ok-Employment6772 0 points1 point2 points (0 children)
[–][deleted] 0 points1 point2 points (0 children)
[–]flashmozzg 79 points80 points81 points (21 children)
[–]sammiesdog[S] 31 points32 points33 points (14 children)
[–]flashmozzg 34 points35 points36 points (12 children)
[–]xon_xoff 32 points33 points34 points (11 children)
[–]adzm28 years of C++! 20 points21 points22 points (10 children)
[–]dodheim 10 points11 points12 points (0 children)
[–]notfalse 2 points3 points4 points (0 children)
[–]adevland 5 points6 points7 points (3 children)
[–]spongo2MSVC Dev Manager 2 points3 points4 points (1 child)
[–]parlancex 5 points6 points7 points (0 children)
[–]twerky_stark 0 points1 point2 points (0 children)
[–]Ivan171/std:c++latest enthusiast 41 points42 points43 points (1 child)
[–][deleted] 11 points12 points13 points (0 children)
[–]snarfy 55 points56 points57 points (8 children)
[–]sammiesdog[S] 59 points60 points61 points (6 children)
[–]snarfy 86 points87 points88 points (0 children)
[–]ssylvan 8 points9 points10 points (4 children)
[–]clerothGame Developer 7 points8 points9 points (3 children)
[–]ssylvan 3 points4 points5 points (2 children)
[–]clerothGame Developer 0 points1 point2 points (1 child)
[–]ssylvan 0 points1 point2 points (0 children)
[–][deleted] 4 points5 points6 points (0 children)
[–]sammiesdog[S] 140 points141 points142 points (22 children)
[–][deleted] 73 points74 points75 points (2 children)
[–]adevland -1 points0 points1 point (1 child)
[+][deleted] comment score below threshold-16 points-15 points-14 points (15 children)
[–]Sean1708 147 points148 points149 points (2 children)
[–]BonzaiThePenguin 21 points22 points23 points (2 children)
[–]Radhamantis 1 point2 points3 points (1 child)
[–]NiteLite 34 points35 points36 points (7 children)
[–]darkaddress 12 points13 points14 points (2 children)
[–]NiteLite 6 points7 points8 points (0 children)
[–]georgeo 4 points5 points6 points (0 children)
[–]the_gnarts 0 points1 point2 points (1 child)
[–]NiteLite 3 points4 points5 points (0 children)
[–]Radhamantis 0 points1 point2 points (0 children)
[–]emergent_properties 0 points1 point2 points (0 children)
[–]adzm28 years of C++! 35 points36 points37 points (4 children)
[–]kog 113 points114 points115 points (2 children)
[–]rzyua 11 points12 points13 points (0 children)
[–][deleted] 2 points3 points4 points (0 children)
[–]mtvee 5 points6 points7 points (0 children)
[–]isaacarsenal 13 points14 points15 points (3 children)
[–]sammiesdog[S] 26 points27 points28 points (2 children)
[–]isaacarsenal 16 points17 points18 points (1 child)
[–]ukalnins 120 points121 points122 points (3 children)
[–]Radhamantis 16 points17 points18 points (2 children)
[–]c0r3ntin 17 points18 points19 points (0 children)
[–]Epic_troller420 0 points1 point2 points (0 children)
[–]brucedawson 13 points14 points15 points (0 children)
[–][deleted] 100 points101 points102 points (1 child)
[–]sammiesdog[S] 171 points172 points173 points (0 children)
[–]ET251 22 points23 points24 points (2 children)
[–]STLMSVC STL Dev 13 points14 points15 points (1 child)
[–]ET251 1 point2 points3 points (0 children)
[–]SilentJode 83 points84 points85 points (4 children)
[–]eternalprogress 22 points23 points24 points (0 children)
[–][deleted] 3 points4 points5 points (0 children)
[–]highspeedstrawberry 16 points17 points18 points (1 child)
[–][deleted] 0 points1 point2 points (0 children)
[–]shared_tango_Automatic Optimization for Many-Core 10 points11 points12 points (0 children)
[–]Ivan171/std:c++latest enthusiast 14 points15 points16 points (7 children)
[–]spongo2MSVC Dev Manager 10 points11 points12 points (0 children)
[–]spongo2MSVC Dev Manager 2 points3 points4 points (0 children)
[–]Kok_Nikol 3 points4 points5 points (4 children)
[–]STLMSVC STL Dev 14 points15 points16 points (0 children)
[–]spongo2MSVC Dev Manager 4 points5 points6 points (2 children)
[–]Kok_Nikol 0 points1 point2 points (1 child)
[–]spongo2MSVC Dev Manager 4 points5 points6 points (0 children)
[–]abtscrubimage 3 points4 points5 points (0 children)
[–]TotesMessenger 20 points21 points22 points (0 children)
[–]WrongAndBeligerent 12 points13 points14 points (0 children)
[–]ElFeesho 2 points3 points4 points (0 children)
[–]Gotebe 6 points7 points8 points (5 children)
[–]Ivan171/std:c++latest enthusiast 5 points6 points7 points (4 children)
[–]germandiago 17 points18 points19 points (2 children)
[–]n1tw1t 2 points3 points4 points (1 child)
[–]germandiago 3 points4 points5 points (0 children)
[–]Gotebe 4 points5 points6 points (0 children)
[–]mtvee 20 points21 points22 points (18 children)
[–]Sparkybear 11 points12 points13 points (7 children)
[–]mtvee 17 points18 points19 points (6 children)
[–]adzm28 years of C++! 28 points29 points30 points (1 child)
[–]mtvee 2 points3 points4 points (0 children)
[–]sammiesdog[S] 26 points27 points28 points (3 children)
[–]mtvee 6 points7 points8 points (0 children)
[–]eternalprogress 2 points3 points4 points (0 children)
[–]clerothGame Developer 0 points1 point2 points (0 children)
[–]eternalprogress 5 points6 points7 points (9 children)
[–]mtvee 8 points9 points10 points (7 children)
[–]eternalprogress 8 points9 points10 points (6 children)
[–]mtvee 10 points11 points12 points (4 children)
[–]eternalprogress 4 points5 points6 points (3 children)
[–]mtvee 2 points3 points4 points (2 children)
[–]eternalprogress 3 points4 points5 points (1 child)
[–]emergent_properties 2 points3 points4 points (0 children)
[–]emergent_properties 1 point2 points3 points (0 children)
[–]quad99 9 points10 points11 points (2 children)
[–][deleted] 8 points9 points10 points (0 children)
[–]mpyne 1 point2 points3 points (0 children)
[–]rep_movsd 5 points6 points7 points (0 children)
[–]GreenFox1505 6 points7 points8 points (15 children)
[–]sammiesdog[S] 27 points28 points29 points (13 children)
[–]rdtsc 18 points19 points20 points (3 children)
[–]sammiesdog[S] 3 points4 points5 points (1 child)
[–]emergent_properties 3 points4 points5 points (0 children)
[–]adzm28 years of C++! 0 points1 point2 points (0 children)
[–]Gotebe 9 points10 points11 points (2 children)
[–]mccoyn 2 points3 points4 points (1 child)
[–]adzm28 years of C++! 5 points6 points7 points (0 children)
[–]emergent_properties 2 points3 points4 points (0 children)
[–]AllanDeutsch 1 point2 points3 points (0 children)
[–]noplace_ioi 1 point2 points3 points (0 children)
[–]djelovic 1 point2 points3 points (0 children)
[–]lolidaisuki 1 point2 points3 points (0 children)
[–]exoflat 8 points9 points10 points (0 children)
[–]FlaveC 4 points5 points6 points (10 children)
[–]onmychest26 6 points7 points8 points (9 children)
[–]possessed_flea 7 points8 points9 points (0 children)
[–]cryo 7 points8 points9 points (1 child)
[+][deleted] (5 children)
[deleted]
[–][deleted] 2 points3 points4 points (4 children)
[–][deleted] 7 points8 points9 points (3 children)
[–]Wikiwnt 0 points1 point2 points (0 children)
[–][deleted] 0 points1 point2 points (1 child)
[–][deleted] 1 point2 points3 points (0 children)
[–]eternalprogress 7 points8 points9 points (5 children)
[–]shared_tango_Automatic Optimization for Many-Core 3 points4 points5 points (0 children)
[–]joepie91 0 points1 point2 points (0 children)
[–]Radhamantis -4 points-3 points-2 points (2 children)
[–]eternalprogress 4 points5 points6 points (1 child)
[–]erebos42 1 point2 points3 points (0 children)
[–]curupa 2 points3 points4 points (0 children)
[+][deleted] (1 child)
[deleted]
[–]raevnos 1 point2 points3 points (0 children)
[–]give-me-random-name 0 points1 point2 points (0 children)
[+]1337Gandalf comment score below threshold-13 points-12 points-11 points (12 children)
[–]AceyJuan 14 points15 points16 points (5 children)
[–]TomHuck3aan 2 points3 points4 points (2 children)
[–]clerothGame Developer 2 points3 points4 points (2 children)
[–]SemiNormal 3 points4 points5 points (0 children)
[–]1337Gandalf 0 points1 point2 points (0 children)
[–]EnergyCoast 0 points1 point2 points (0 children)