Golang has probably the worst contribution model among every other project I worked. Even linux kernel is kawai compared to this.
They have finally merged my wine time fix into runtime/windows subsystem, which took 3 month of negotiations and required 2 almost full rewrite and more importantly, Google’s code contribution policy.
Wine does not support memory mapped update of the timer structures – it is similar to linux vsyscall (or linux copied it from windows), i.e. kernel timer periodically updates some fixed address which can be mapped into userspace and read without using syscall mechanism which is noticeably slower. Wine does not have it (and frankly it can not, since it runs in userspace), but the whole golang windows port is based on this windows feature. I implemented a fallback mechanism which uses plain windows syscall to get the time and QPC counters to implement monotonic time.
But this post is not about technical details of the time subsystem in golang, but instead about stupidity of the google’s contribution policy.
Google contribution policy requires you to have a google account, which it may not create for whatever obscure reason, it just fails and nothing moves forward. No oauth as an industry standard, but only ugly google’s own account. I wonder whether it will force me to use google+ to login.
If you ask another person to contribute into golang on your behalf, they do not accept your patch, since they do not know whether you signed or not contribution agreement (event though the person who sends the patch and authors it does sign this shit). Google forbids to discuss and review patch on github, you can only create an issue with complain, they force to use Gerrit and follow golang’s own horrible contribution steps based on single-commit approach in git.
Technical management at google (and frankly many other places) breaks the whole idea of the fun behind working with open source project.
Please be not like google.