-
Notifications
You must be signed in to change notification settings - Fork 781
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add telemetry blog post #395
base: gh-pages
Are you sure you want to change the base?
Conversation
ae8ee4c
to
9005dd8
Compare
9005dd8
to
04f79af
Compare
address this problem have completely lost the trust of the customer base. As soon as a | ||
brand is associated with “tracking,” people stop affording the company the benefit of the | ||
doubt. Telemetry mistakes seeming sinister (and sometimes correctly so) has lead to the | ||
passing of the GDPR in Europe. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
define the acronym as General Data Protection Regulation (GDPR)
.
### Implementation ### | ||
|
||
Being privacy-preserving is more than just having our policies in open-source code; we must have | ||
good policies. To abide by the GDPR we cannot collect any Personally Identifying Information. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
use Personally Identifying Information (PII)
.
|
||
To make this concrete, this is an example of what we send for a managed frame: | ||
|
||
``` |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
add json
after the backticks to get nice code formatting.
"guid" : "0845998F-6B70-4AA8-9214-6731378926A0", | ||
"token" : "0x6003817", | ||
"native_offset" : "0x1fd", | ||
"il_offset" : "0x00071" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
indent these so they're not on the same column as the curly braces
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
would be nice to add some comments about what each field means, e.g.
{
"is_managed" : "true", // whether the crash occurred in .NET code or the runtime
"guid" : "0845998F-6B70-4AA8-9214-6731378926A0", // unique identifier of the assembly that contained the crashing code
"token" : "0x6003817", // ...
"native_offset" : "0x1fd", // ...
"il_offset" : "0x00071", // ...
}
It is a much harder problem for a runtime than for a web server because we expose a lot of the | ||
details of the underlying platform to a developer who chooses to poke and prod. The CPU model isn’t | ||
likely to cause problems with a web server, but leads to | ||
[impossible bugs](https://www.mono-project.com/news/2016/09/12/arm64-icache/) with mono. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
change the link to /news/2016/09/12/arm64-icache/
likely to cause problems with a web server, but leads to | ||
[impossible bugs](https://www.mono-project.com/news/2016/09/12/arm64-icache/) with mono. | ||
We expose these abstract state machines in the API that only roughly correlate to the bits in the machine registers. | ||
This train of thought with respect to state machines and logging lead to the flight recorders, which will be mentioned in a subsequent blog post. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
should we do the flight recorder post before this one?
We expose these abstract state machines in the API that only roughly correlate to the bits in the machine registers. | ||
This train of thought with respect to state machines and logging lead to the flight recorders, which will be mentioned in a subsequent blog post. | ||
|
||
The best part of all of this is that it is all open source. Because mono is an embedded runtime, when you embed our telemetry engine you gain the ability to collect telemetry on your own code. Someone today can build mono in a way that allows them to get a beautiful runtime state dump on each crash. If they don’t change too much, it’ll even be GDPR-compliant. It can be hard to get really excited about logging, but it’s easy to get excited about spending less time teaching customers to debug. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
we should probably expand a bit on how this is explicitly opt-in for embedders and how we're only using it in VSMac today and not on any random user binaries that are executed with mono-project.com packages.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes, we must make it clear that this is completely opt-in and the place we enabled has user consent.
I'm going to make this into an informational how-to article under advice from Miguel, and make a shorter blog post. I'm going to include information on the flight recorders there as well. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This blog post looks really promising :)
|
||
Software engineers often like to think of exceptional paths as being rarely taken. | ||
While this is hopefully the case on a customer’s machine, the engineer will see a | ||
program fail far more often than they will watch it succeed. Every engineer who has |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Every one
engineer who has to suffer from
...
had to suffer bad tooling of one form or another becomes aware of this fact like a | ||
person with a broken foot becomes aware of how far away things are. | ||
|
||
The modern software lifecycle does not end when you ship a piece of code. Defects in |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The Modern software lifecycle...
portion of the time it takes to fix a bug can be spent in discovering that it exists. | ||
Often this discovery includes finding the ways that the customer’s environment differs | ||
from the developer’s testing environment. A back-and-forth conversation can give a | ||
developer a lot of information, but it’s not the case that every bug filer is |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
...conversation can give a developer a lot of information
to a lot of innovations in software engineering tooling. Unfortunately, many attempts to | ||
address this problem have completely lost the trust of the customer base. As soon as a | ||
brand is associated with “tracking,” people stop affording the company the benefit of the | ||
doubt. Telemetry mistakes seeming sinister (and sometimes correctly so) has lead to the |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'd stay away from such politically charged tone here.
You can make the point that some user can be averse to tracking and can find telemetry to be such one of those.
Plus, you can say that the EU passed GDPR as a response to such concerns.
sweaty palms. The addition of integrated telemetry support to the Mono runtime is something | ||
that would have to balance a number of concerns. | ||
|
||
I believe that we did pretty well. Any constructive criticism through official channels is |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Avoid the self congratulatory tone. You can say the same without using it.
|
||
We needed to balance that desire against the desire for a crash from two different versions of mono | ||
to look very similar or identical to the backend (Part 3). Mono already has unique hashing functions | ||
for metadata objects; we use it inside of the AOT compiler and runtime. We can then generate a |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Mono already has unique hashing functions for metadata objects; we use it inside of the AOT compiler and runtime.
This fits better as part of answering that the solution is hashing. IE:
The solution to this is to generate a hash that is identical for two ...., while uploading ... - Mono already has such hash functions for metadata objects as our AOT compiler uses them
```
details of the underlying platform to a developer who chooses to poke and prod. The CPU model isn’t | ||
likely to cause problems with a web server, but leads to | ||
[impossible bugs](https://www.mono-project.com/news/2016/09/12/arm64-icache/) with mono. | ||
We expose these abstract state machines in the API that only roughly correlate to the bits in the machine registers. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why do we expose these abstract state machines? It's not clear what's the connection with the previous paragraph.
likely to cause problems with a web server, but leads to | ||
[impossible bugs](https://www.mono-project.com/news/2016/09/12/arm64-icache/) with mono. | ||
We expose these abstract state machines in the API that only roughly correlate to the bits in the machine registers. | ||
This train of thought with respect to state machines and logging lead to the flight recorders, which will be mentioned in a subsequent blog post. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It's hard to make the connection of state machines, logging and flight recorders.
Maybe explain that the concrete way we realize those state machines is through logging and flight recorders. Plus give some high level overview (a few words) of what a flight recorder is. IE:
Flight recorder is the name we give to lightweight logging doing using a circular buffer
- or what you feel it's appropriate to mention here.
We expose these abstract state machines in the API that only roughly correlate to the bits in the machine registers. | ||
This train of thought with respect to state machines and logging lead to the flight recorders, which will be mentioned in a subsequent blog post. | ||
|
||
The best part of all of this is that it is all open source. Because mono is an embedded runtime, when you embed our telemetry engine you gain the ability to collect telemetry on your own code. Someone today can build mono in a way that allows them to get a beautiful runtime state dump on each crash. If they don’t change too much, it’ll even be GDPR-compliant. It can be hard to get really excited about logging, but it’s easy to get excited about spending less time teaching customers to debug. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes, we must make it clear that this is completely opt-in and the place we enabled has user consent.
We expose these abstract state machines in the API that only roughly correlate to the bits in the machine registers. | ||
This train of thought with respect to state machines and logging lead to the flight recorders, which will be mentioned in a subsequent blog post. | ||
|
||
The best part of all of this is that it is all open source. Because mono is an embedded runtime, when you embed our telemetry engine you gain the ability to collect telemetry on your own code. Someone today can build mono in a way that allows them to get a beautiful runtime state dump on each crash. If they don’t change too much, it’ll even be GDPR-compliant. It can be hard to get really excited about logging, but it’s easy to get excited about spending less time teaching customers to debug. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Not sure about the dismissive tone of spending less time teaching customers to debug.
Is it worth mentioning what one would do once they have a crash dump? |
No description provided.