Ian Lance Taylor's Response to “Go Is Google's Language”
groups.google.com
groups.google.com
If a community-maintained fork is created, it would need time and monetary investment similar to what google is doing just to maintain and develop non-controversial features. Question is: Is this assessment sensible and if so, is the community able or willing to make this kind of investment?
(Source: public git logs for all core Go repos in past year, look for google.com or golang.org emails, multiply by typical Google salaries, which you can find on various sites.)
I'd be surprised if Ian Lance Taylor, Russ Cox and Rob Pike are making less than a million dollars a year each. They're all L8+, and even by that standard they're notably famous/distinguished/respected.
So these Linkedin/Twitter style thought leaders demanding some kinda OpenGo foundation need to ask if they have capacity to raise this amount consistently over years to start and run this foundation.
At best, a foundation is also going to provide more neutral governance, as well as a nexus for multiple corporations to work on the language together. Other companies are more likely to adopt Go if they see it as not just a Google project.
I personally don't care whether my favorite languages have a foundation, as long as they're used for large projects by large companies. That alone is a good guarantee that they'll stick around.
If the popularity of the language grows enough, there will inevitably be new companies and ecosystems reliant on it and those interests may eventually band together to create forks they think bring value to their businesses.
Outside of that formula, forks will almost always remain niche and without significant investment.
> In effect, then, the current state is what the blog post suggests at the very end: final decisions about the Go language are made by the core Go team, and the core Go team all work at Google, but there is no meaningful sense in which Google, apart from the core Go team, makes decisions about the language.
That's like saying that there's no meaningful sense in which I, apart from my brain and nervous system, make decisions about what my body does.
There is more to Go than Google, there is a community and it is as free as can be. But the final decision makers are at Google. It's all very well said, every open source project has a set of final decision makers and that project is theirs. Unless you work hard to become one of those decision makers the project is not yours. And perhaps it is not notable to write the blog post "this open source project ACTUALLY belongs to so-and-so."
I'm not certain, because - like I said - it's worded confusingly, but that was my impression.
I think you could say that about most teams at most companies. That doesn't mean that they have any autonomy whatsoever from their company, though.
For me, the more convincing argument is that Go would have probably happened in a parallel universe as well. Imagine that Griesemer, Pike, and Thompson had worked another company that gives the freedom to work on personal projects, it is very likely that they had come up with the same language. They have argued in talks that Go was created as an answer to problems that they identified in the development of infrastructure at Google. That may have been a trigger, but Go is firmly rooted in the tradition of C, UNIX, Plan 9, and Limbo and a logical next step in that tradition.
Hence, to me, Go is really Griesemer, Pike, Thompson, and Cox' language and not Google's language.
Of course, the title of the original article that Taylor is reacting to was a bit sensational. But I think the original point was that Go is not a language that is developed by the community, but a small set of people. Whether they are employed by Google, Facebook, Uber, or Zalando is somewhat irrelevant to this debate.
no successful language-indeed, no successful free software project of any
sort is a democracy [...]
Successful languages pay attention to what people want, but to change
the language according to what most people want is, I believe, a recipe
for chaos and incoherence. I believe that every successful language
must have a coherent vision that is shared by a relatively small group
of people.
which is essentially the "benevolent dictatorship" principle; it's hard to swallow because developers tend to imagine open source projects as "owned by the people".I believe too that projects "owned by the people" end like The Homer™, and I'm actually curious, as the author, about:
I would be interested to hear of a counter-exampleOn that note, I also seem to remember that LLVM/Clang are pretty democratic, but I haven't dug deeply and may be completely wrong.
Go : C++ :: Go's governance : C++'s governance
works pretty well. Maybe C++ is a good example of this, and maybe that is a good way to build a language like C++, but it might be a bad way to make a language like Go.You could argue whether those are the goals a language should pursue, but it's pretty obvious a central designer with free reign would not have achieved those goals.
> I believe that every successful language must have a coherent vision that is shared by a relatively small group of people.
He points out that there are over 100 committers, nearly half of which are non-Google; it's only the small group of people in charge of the language spec that are at Google.
It may be true that Google the company don't drive Go the language. However, simply working in the same company tends to make you take on the perspective and values of that company.
In the Xen Project, for instance, Citrix is the largest single contributor. Citrix management have basically left the engineers working in the Xen to our own devices; but nonetheless we've made a conscious effort to diversify the organizational membership of the core decision-makers in the project: partly to make sure that we're not drifting into a Citrix-centric groupthink, and partly to avoid the appearance of Xen being a Citrix-only project.
If I were them, I would be looking for an opportunity to arrange to have at least one non-Googler on the core Go team, for the same reasons.
That's how I read the 50 or so out of 100 approvers as being Google. That means 50 (or so, can't remember the exact number..) are not Google.
When I read "Approvers", I match that in my head to "Core Team". Is there a "rank" above approvers that defines the core team?
There are 100+ people who can approve changes to the implementation; but there only a handful of people who can make changes to the language specification, and all of those people are at Google.
Should that be "the reference implementation of Go" ?
The specification mentions "implementation restriction" many times, so the Go spec writers seem to be encouraging other implementations. Besides gc, google also provide gccgo. If you download the gc source, change it a little so it still conforms to the spec, and publish, then that would be another implementation of Go. I believe there's an incomplete JS-based version of Go around as well, so if that's ever finished, that would be another implementation of Go.
Nonsense. You don't even realize there is an underlying bias when you get paid by someone to do something.
If push came to shove, and we saw a war between G and say ... Oracle, over a kind of 'programming language' ... you can be darn sure the claws will come out and it will be apparent 'who owns what' etc..
In the end it may not matter: Go is what it is, it's not set up for licensing or battle, so this all may be moot.
My observation of Google's culture is that it can be very difficult to see the ways in which they dominate projects they participate in because it's very difficult to keep perspective on how even small investments by Google tend to overwhelm the volume of other contributers project. Google has a lot of great, productive engineers and when they turn those folks fulltime to open source projects the results are very impressive. I feel this too with the open source work I'm adjacent to.
Go's situation is further exacerbated by the somewhat normal expectation at Google that programming systems often feel very top-down mandated to new employees (even if I think reality is that there is just a lot of cultural and tooling inertia there; in reality you can use whatever you want if you can make a case for it). The recent "fix Python's broken batteries" thing comes to mind as a conflict long overdue but suppressed by that culture of top-down mandates. Indeed, even without insider knowledge, rumors speak in hushed tones about how top-down GVR's leadership of Python was during his time working with Google. It seems like after he left, that notion has softened.
So even if folks on the Go project don't mean for it to feel like "google's language", it's still entirely possible that it does feel like Google exercises a lot of control over Go. This is a really significant and old challenge for big companies interacting with open source, but it's one that language teams have only recently started to really face at scale (see also: Rich Hickey's conflict with the Clojure community over overly biasing Clojure towards Datomic's interest and not helping to prioritize or yield resources or his oversight mechanisms to other people's needs).
The Go team was (and has been) also been slow to address the community's obvious and vocal need for some sort of templating solution. While it's fair to appreciate the difficulty of these discussions and designs, it's also the case that the Go project communicated their reservations rather poorly and created a lot of ill will that the language still suffers from today.
As languages are starting to open up and become more community driven (again, it used to be a lot more like this with small scripting language communities), the difference between a carefully guided language like Go and a language where anyone an contribute all the way down to the compiler and have a fair expectation of getting it included (like Haskell's GHC project) start to really contrast.
I’m not sure I would describe it that way. I don’t know of anything in Clojure language that is biased towards Datomic’s interest (or Cognitec’s). The conflict was about Rich not having enough time to consider/review/accept changes to the language core and declining to relax acceptance of such changes without his sign off. It’s a problem and it doesn’t sit well with some people in the community, but it really is very different from your accusation.
The amount of cognitive overhead in dealing with all the history that's baked into Java is really annoying. Things like the dated concurrency model, the overachieving in logging (and other) libraries (when one to use?), the poorly thought out I/O libraries, the crazy build tools and slow builds, ... It's always a relief to get back the the smoothness of Go.
Which practically contains almost everything one can think of? Yeah, like that's not a good thing. Where's the golang equivalent of Hadoop, Spark, Vertx, Netty, Akka, etc.? Not to mention the Java standard library with it's new time package, and java.util.concurrent, and many more.
> Better to not have generics than to have generics that are bodged into the language like they were in Java.
Strawman fallacy. Not to mention that generics in Java are not botched, they made a tradeoff and it paid off quite well, just look at the number of existing JVM languages. That beings said, there is work being done to improve generics in Java even more.
I know about Joda time, that even another point in how mature the Java ecosystem is. There's no similar offering in golang.
IMO the main reason why people aren't creating more CLR language is unrelated to generics. You can compile many languages to CLR bytecode and never emit these ldelem/stelem/unbox.any instructions. The main reason is C# is good language, and it evolves fast enough.
I don't believe Java developers deliberately crippled Java to incentivize third parties to develop more JVM languages.
You think it's a good thing. The parent doesn't. So isn't it better that both Go and Java exist, rather than Go be Java-ised, so you both get what you want?
> Strawman fallacy.
It's only a straw man to those who like the tradeoff. Tradeoffs are always a matter of judgement. The parent (and many others) make a different judgement to you. So isn't it better that both the Java and Go approaches exist, to satisfy different tastes?
Lots of opensource projects get by largely on the evenings-and-weekends contributions of a (often small) number of contributors. Sometimes managing to find resources for a full time person or two at the core.
There are a ton of great, productive engineers out there. Some of them contribute across a number of projects in their "spare" time. It's easy to understate the impact even a small, mostly full time (or at least solidly part-time) team can make on a project.
Any company willing to put it's money where its proverbial mouth is like this can easily start to significantly affect the direction of all but the largest OS projects. You don't have to be google sized, you just have to effectively vote with hours (e.g. $) spent. The governance model of the project may help or hinder this to some degree, but in the end results speak (or a fork is likely).
Go is not the only such project. For how long did linux hw decoding patch for chromium wait for being merge?
And it's still not merged because of the "maintenance burden" (needless to say big linux distros maintain this patch and apply it to their chromium packages just fine).
Android hw support is merged, no problems. Oh, and Chromium OS has hw decoding as well, while having 0.0001% market share. Because it's a google's product.
For google open source is nothing but a way to obtain free labor and make more money. These are their products, meant to make money for them. Others are mere free contributors.
I'm continually surprised that more of the greater, vocal community does not grok this.
I think it’s disingenuous to paint this as a tyranny of the masses type situation as no one is calling for democracy. And even if they did, Apache and Python are showing successes in that area.
If google wanted an OSS language, they would have non-google committers. It’s perfectly cool to have company run languages. I think people just need to be aware and not confused that Go is anything other than Google’s language that we all get to use for free.
For me, with almost all things google, the risk is when Google grows bored with this and makes all the employees work on other stuff.
I find both of these communities to be huge turn offs. I think Apache projects and Python demonstrate varied quality; design by committee.
Conversely I find Go releases to be pretty high quality. When they are marginally suspect, I tend to find the strongest critics are members of the Go core team (e.g. future of http, sql packages).
> If google wanted an OSS language, they would have non-google committers.
I don't buy this line of reasoning. Go has been extremely welcoming to contributors. You don't need to be a committee to contribute. Are the thousands of projects open sourced by corporations under their corporate GitHub account not _true_ OSS to you?
> For me, with almost all things google, the risk is when Google grows bored with this and makes all the employees work on other stuff.
I understand this, but it's FUD. We've heard nothing but positive feedback from Googlers (no "they won't let us do X"), and if this _did_ happen, I would expect the existing committers to rebel sufficiently (i.e. quit) that this problem solves itself. Until then, I see no cause to warrant a change in management.
Ian claims "59 Googlers on the committers list and 51 non-Googlers." I was surprised by that too.
"the sheer number of minds to be coordinated affects the cost of the effort, for a major part of the cost is communication and correcting the ill effects of miscommunication (system debugging). This, too, suggests that one wants the system to be built by as few minds as possible."
If a language is to change over time, this specification or implementation must change. Somebody has to decide how changes will be made. All successful languages have a small set of people who make the final decisions. Many people will provide input to this decision, but no successful language--indeed, no successful free software project of any sort--is a democracy. Successful languages pay attention to what people want, but to change the language according to what most people want is, I believe, a recipe for chaos and incoherence. I believe that every successful language must have a coherent vision that is shared by a relatively small group of people.
And again
Many people will provide input to this decision, but no successful language--indeed, no successful free software project of any sort--is a democracy.
On point.
The fact that Golang has no generic is a huge thing. I've read countless amount of code that abused generics (unfortunarely developers think they have to use generics all the time if they are available) and is probably completely insecure for the simple reason that very few people manage to audit/understand the code. If it generics could only be used when necessary, yes, but there are no technical way to enforce this.
Gofmt is the second blessing. All codebases look the same because it is not customizable. This makes reading Golang code and understanding it fast as hell.
The GOPATH is also a huge win. You always know where everything is and it is really fast to figure out about dependencies or structure of the project.
What I'm saying is that in my years of security consulting, Golang codebases have always been the clearest ones to read and have always been the most secure ones.
I feel like a lot of the negative perspectives are given from the writing point of view, but the reading perspective is clearly a huge win for Golang.
Can you tell me if you have found any kind of security issue relating to interfaces and reflect(ion) ?
I ... have some bad news.
do you always work on projects in which you made every decision?
> There was no mandate or suggestion from Google management or executives that Google should develop a programming language. For many years, including well after the open source release, I doubt any Google executives had more than a vague awareness of the existence of Go
You can be sure that whatever they do gets a high profile without it in any way being "supported" or "official"
> There was no mandate or suggestion from Google management or executives that Google should develop a programming language. For many years, including well after the open source release, I doubt any Google executives had more than a vague awareness of the existence of Go
And JS was born and evolved with the browser.
Javascript was backed by Netscape, and later by Microsoft/IE. It would never have succeeded without corporate backing and being on of the 2.5 usable languages on the web (Java was the other one, I'm counting ActiveX/VBScript as half)
I'm not very familiar with the history of Python, though it seems it was funded in its early years by various research institutes that employed Guido van Rossum, rather than a giant corporation.
Granted, this support was perhaps more cultural than corporate. There's something to be said for a community that grows in your own backyard, has significant documentation in your native language(s), etc.
Heroku was acquired by Salesforce.com in 2010.
It's a C-like language with GC, that compiles to native code supported by an efficient runtime, and can work effectively with parallel/concurrent code. In many ways it's Java done right, or a more intuitive (and from certain POVs, preferable) alternative to Haskell and Ocaml. That would seem to be enough to drive adoption.
No, but seriously, you didn't get what I was saying there. The whole reason Go might be of interest is that it is loosely C-like in a way that Haskell and Ocaml are not.
Not quite:
* no generics
* error prone error handling
* non tunable GC
* null pointers
* golang interfaces are messy and can't be used to tag structures
* golang time package is garbage
and lots more
Java today is superior to golang in almost every front.
Compilation times are not that different, especially when using incremental compilation. I worked on large projects in both languages, and for any non-trivial code base, the difference isn't that far off.
I'd argue that readability is better in Java due to things like non-clutter due to error handling, and the existence of generics.
Deployment has been solved for a while now with building shadow jars[1].
[1] Not to mention offerings like: https://quarkus.io/
I you're looking for high throughput you just need to allocate less. Or use unsafe. And it's totally doable.
And the same approaches can be done in Java (e.g. self-managed off heap allocations), even more-so when they introduce value types.
func main() {
n := 1
fmt.Println(n)
}
Object pooling won't help here.The new GCs on the JVM have very few parameters to tune, I think Shenandoah or ZGC have only two parameters to set up, can't get much simpler.
Escape analysis was just rewritten, and the objective is to handle this case more gracefully.
Folk were using that Go, but they would use the Google Go.
Counter-examples: Clojure, Elm.
It would be really frustrating for you, because assuming people found out about your language in the first place, it would be shot down for not having generics (or something else), and there wouldn’t be any Google fanboys to come defend it. So much of what’s popular is determined by which company is backing it, whether people want to admit that or not. Pure bandwagoning.
There is certainly the need for network effects which large corporations often can provide more consistently, but we have seen plenty of examples within the space where individuals or smaller companies have been successful in providing these same network effects.
Nowadays if you want to create a new language there is a minimum set of features everybody expects that raises the complexity quite high. You could just create a bare language but who would adopt that?
Not to hate too much on erlang, but I would say that beyond being small, as a pushback to characterizing it as "bells and whistles", Elixir brings to the table "21st century" understanding/opinions on what makes for readable and maintainable code (build packaging, first-class documentation, module organization, file types, strings, map-focused vs struct-focused, sane function parameter ordering). As a result, I can confidently onboard a junior into Elixir (especially if they were in a RoR bootcamp) and have them be productive. I probably wouldn't for erlang.
That's sort of why I threw in OCaml; largely it is still only successful within academia. Python on the other hand had similar beginnings, but has been wildly successful both in academia and in common use.
Many of those languages came out in the 1990's when the big corporates were busy pushing visual 4GL's to replace programming languages. But programmers prefered to write a Perl ten-liner rather than fire up a visual environment, click on some toolbars to place some widgets on a form, link in the data files using the right-click form, wait while the OS thrashes the hard drive as it paints the screen for the first test, and on and on. When those corps realized they'd dropped the ball, they soon built their own.
I worked as a programmer in the 1990s, when I got paid to write things in C, C++, Perl, Khoros (I guess that's a "visual 4GL"?), IDL (the array language), VB, SQL, INFORMIX's horrible forms thing (which was not especially "visual"), sh, csh (not my fault), and occasionally Tcl. It's true that PHP, Ruby, Tcl, OCaml, and Lua came out in the 1990s (Python is from 1990, so arguably the 1980s), but they became widely used in the 2000s. In fact, even Perl was considered kind of déclassé until these "lightweight languages" took over the world, and then Perl became déclassé again after being eclipsed by Python, Ruby, and most surprisingly, JS.
(OCaml is not a "lightweight language" and is not like the others, and consequently never became popular.)
I don't recognize your description as corresponding to any events I remember. Sun was pushing Java. Microsoft was pushing C++, then Java, and then when Sun sued them, C#. Apple wasn't pushing much of anything until they bought NeXT, and then they started pushing Objective-C. As far as I know Oracle was pushing PL/SQL and cisco was pushing bletcherous IOS commands. Microsoft was pushing VB, which sort of resembles what you're saying, but VB wasn't a 4GL (the language was just 1960s Basic minus line numbers and plus subroutine arguments) and was actually spectacularly successful at what it did; it just wasn't good at making web sites. Borland was pushing Delphi. I guess in a way Microsoft was pushing Access? Are you thinking of Microsoft Access?
Maybe you were thinking of PowerBuilder? It was spectacularly successful at what it did, too (again, not building websites), and it was a visual 4GL, but it was being pushed by Powersoft, not a big corporate, until (Wikipedia tells me) Sybase bought it for 0.9 Instagrams in 1995. I never saw anybody use PowerBuilder but I didn't use Microsoft Windows a lot.
When you say, "they soon built their own", do you mean VBA and PowerShell, or what?
Every marketing department was calling their company's new software development product/language/whatever a "Fourth Generation Language" back then. There's no actual definition for what it really means. Perl, Python, Ruby, and PHP represent a trend that peaked the 1990's, some came before and some after, so there's no need to read "1990's" literally.
My total memory (i.e. work, study, and hobby) of that extended decade (1985-ish to 2005-ish) was VB, VBA (Access, Excel), Java on Windows, Quattro Pro, dBASE 3+, Perl, Cobol on IBM (and ICL), and a myriad other obscure mainframe languages and mini-languages that probably still get used in banks and insurance companies.
> I don't recognize your description as corresponding to any events I remember
My previous description of that time was quite typical for many of us. For example, I remember in 2001 developing a five-line Word macro for an accounting department on a leftover 386 sitting in the corner running Windows 95 that read in a file couriered in daily from some other company's Unix system that stripped out some incompatible data from each line. After I deployed it into production, the user every morning started Word, opened a Word document that contained a button on a form, clicked on the button, selected the day's file from the floppy, then waited (at the water cooler) while the macro ran. They then renamed the output file so the date was in the name, and copied it from the LAN to the mainframe using some proprietary program, so it could be input (with the funny Unix bytes removed) to the overnight processing run. Perhaps you worked in the other company sending that Unix-based file to us every day, and didn't see the ongoing after-effects of your C++ program that produced the file.
> they soon built their own
C#, Go, Swift, etc.
This made me think of this (thank you for reminding me about it, by the way):
Really looking forward to see where Alex will take this project.
is that actually true or is that true of a vocal minority? I've been using Go since 2011 and I'm perfectly happy that it's Google's language; I'm happy to mooch off of their investments. In my seven-plus years of using Go I have never encountered a Go programmer in real life that is actually mad about this.
As to your not encountering a Go programmer who's mad about this, I think that's because you're considering people who are already programming in Go. I suspect people who care never actually start using Go because of their thoughts on Google's involvement. (For the record, I too am fine with it, especially after reading Ian Lance Taylor's response.)
um I talk to a lot of programmers that don't use Go. Most that don't use it decide not to use it because of either the type system ("it's not safe/expressive enough") or the garbage collector. I've never talked to someone that said "Go is technically good and I think it would be a good tool but I won't use it because of Google".
I guess because it does not merit that adoption. The only reason it gets attention at all is either 1) "oh it's made by the same people who made UNIX and C and UTF-8", or 2) "oh it's made by Google".
Brand recognition is not that important for programming languages. It does skew decisions a bit, but people still have to make too many of them when moving to another programming language, so the effect is not that significant. Go just happened to hit all the right spots for many programmers at the time and a bit of marketing turned that into some adoption.
Even if it is theoretically true that Go is open source, by employing the majority of the Core Go team, Google exercises extensive soft power over Go. All of the defenses of Go seem to gloss over this.
How many of us get to be lunch or drinking buddies with Russ Cox or Rob Pike? Googlers have much easier access to both than the external community and those are really the only two that matter.
With the key difference being that you can use a different language and achieve the same results you want. You can't just pick a different government.
I mean, the community has (so far) just a few cases were decisions of the core team were 'not so good'. Sometimes because we didn't like the process and sometimes because of the outcome. But I guess, in general, the majority of Go users likes what the core team does.
The problem is more about that many of us have a problem with Google (for a myriad of reasons) and seeing that the core team is tied so deeply into that company makes us worry about future decisions of the core team (as you said). But what could/should the core team do about it?
Suggestions?
1. Embed yourself in the community rather than shy away from it. It's impossible to escape the criticism of "acting on behalf of the company", but being a member of the community can certainly help perception problems
2. Act more slowly on accepting things so that as many voices as possible can have a say
3. Scope what you do to what you're capable of doing _well_
Even if a given feature for a given release isn't what the majority want, people will use it if it solves a problem and is designed and implemented thoroughly.
I think it would be productive to try and list areas where Go would be different if it wasn't at Google. Some examples: C integration, loading plugins, desktop GUIs.
No, but like with the community developed dependency solution, Google can arbitrarily chose not to include it in Go, even if itself proves successful.
So it's more like saying "you can have your own niche ports, just don't expect them to become part of the main language".
If you were really keen to push some functionality into the Linux kernel, but Linus decided he didn't like it, you'd be in exactly the same position. The fact that in Go's case quite a lot of the maintainers work at Google doesn't really change much.
It does if those calling the shots aren’t the committers but their bosses.
I’m not saying that’s how it is, but if it is, it changes things a great deal.
So it's not a level playing field with another contributor.
Yes, but seldom those with the commit bits will so blatantly disregard the community as with the case of the community developed dependency solution (and other cases).
Especially in projects where those with the commit bits are voted, there would be riots...
Unless you are deliberately trying to obscure the facts. Sam Boyer et al are no unanimously elected community leaders whose solutions somehow must be included with main distribution.
> So it's more like saying "you can have your own niche ports, just don't expect them to become part of the main language".
This is exactly same for all open source languages, if core maintainers do not like the your change either fork it and implement or use any other language which gives you feature you wanted.
Unless you are deliberately trying to obscure the facts, this is irrelevant.
Their project seemingly had the blessing of the core team, it was touted as a community effort, it was adopted and tested by the community at large, it was presented and critiqued in public discussions, and so on.
And then it was shot down, unilaterally, and replaced with no discussion by a never before seen implementation from a core team member.
>This is exactly same for all open source languages, if core maintainers do not like the your change either fork it and implement or use any other language which gives you feature you wanted.
Not really, many open source projects give the community a chance to vote on such things, have core team members that are voted into place, and go out of their way to adopt popular community extensions (as opposed to implement their own core-team only versions).
I recall a time when Google's SVP of Engineering saw some of us in
the cafeteria and congratulated us on a release; this was surprising
since we hadn't released anything recently, and it soon came up that
he thought we were working on the Dart language, not the Go language.
That's a great little story. As an IC, I always felt that VP's, Staff, etc would know everything about what was going on in their organization. This story lets me know that even at that level, they don't know everything.What language is not driven by a handful of decision maker? Even what could be argued to be committee driven languages, like say Java, are very much controlled by a handful of committee members.
Power and control aren't about whether you've attempted to change something, they're about whether you can change something.
If Google ever had a conflict between the core Go team vs the people who make money for the company, you can be sure who will win out in that debate. Saying that it's never happened before or that it's unlikely to happen doesn't change the fundamental power dynamics that people are upset about.
I always wonder why HN is full of people who are so sure of the outcomes instead of asking for data about what actually happened.
Its definitely easier to just assert things than ask for perspectives and data that might conflict with your own experience, but you are rarely going to learn anything interesting that way.
Or, what would happen if non-google employees on the core Go team were to take Go in a direction that Google's leadership didn't want to?
A lot of the power of go comes from it being opinionated, but that same opinionated approach is a real pain for some (it turns out common) use cases. With all that said, Go is my language of choice, and I'm happy that Rob seems to be less involved with Go 2.0, and that the core Go team is incorporating user feedback rather than just dismissing complaints as Pike seemed so inclined to do.
They changed it. https://blog.golang.org/go-brand
Well, from a legal perspective Google sure seems to own it:
> https://groups.google.com/d/msg/golang-nuts/6dKNSN0M_kg/axCq...
> As I said, that is my opinion, but I think it's true. I would be interested to hear of a counter-example.
Debian is 1000+ developers with a constitution and voting system.
The name is protected.
Let's assume first that is true.
And these articles are about Go being Google's language, which is empirically and legally true.
Different from C. I can write a C compiler with extensions and release it, call it C or "Something-C" and no IP problems. I can even call it Standard C and even if it's not no one can do anything. I maybe can't call it ANSI C if it's not standard compliant, but that's because ANSI is a protected term, not C. And unlike Go.
Now let's assume it's not true.
In that case Go is not Google's language and there are no ip issues. I can make and release a compiler, call it a Go compiler, and I'm fine.
Which is it? Unsure. I find no information suggesting Go is trademarked. But there are people like in your post claiming that it is. If so that should be easy to cite. I really don't know which it is. So many people claiming the word Go is protected. Perhaps they have better references than I could find and we can figure out what sort of language Go really is.
https://groups.google.com/d/msg/golang-nuts/6dKNSN0M_kg/dMCQ...
> The name Go is not trademarked by Google, at least as a programming language trademark. There are other things Google makes called Go (an interesting signal on its own) and they might be trademarked, but Go the language is not a trademark.
> -rob
But, here is Google's official trademark list:
https://www.google.com/permissions/trademark/trademark-list/
> Golang™ programming language
> Go™ programming language
Golang and Go are trademarked by Google as programming languages and Rob Pike is not aware of this. That is interesting. Rob should be made aware.
And so the debate is now settled: Go is in fact Google's programming language, as an empirical legal fact.
I'm not confident I'm correct only because it seems unlikely Google would have a page listing trademarks it doesn't actually own. That being said, I'm pretty sure there's no other place to search for trademarks.
I also don't think there is actually a trademark on the term "Go" based on this USPTO search: http://tmsearch.uspto.gov/bin/showfield?f=toc&state=4809%3Ax.... But admittedly I've only looked through five or six pages; using the option to search for an exact term doesn't seem to cut down the search results at all.
Putting a ™ symbol after a name is only a claim on that name to be one's own property for use as a mark on some product or service when trading, and big corporates do this all the time. So I think it's likely Google would have such a page.
> I also don't think there is actually a trademark on the term "Go" based on this USPTO search
There's a distinction between a trademark and a registered trademark. Registering the name in some jurisdiction's database just means the corp has begun its defense of that claim before it sees a perceived infringement.
I would imagine everyday words like "Go" (or "Groovy") wouldn't be accepted by the US trademark office anyway, so perhaps Google tried but failed to register it there. They might get "Golang" accepted but the Go team have said the name of the language is "Go" not "Golang".
Word Mark GO
Goods and Services IC 009. US 021 023 026 036 038.
G & S: Computer programs and downloadable computer programs that implement a computer programming language for use in developing, building and managing other software.
FIRST USE: 20091110.
FIRST USE IN COMMERCE: 20091110
Standard Characters Claimed
Mark Drawing Code (4) STANDARD CHARACTER MARK
Serial Number 88100955
Filing Date August 31, 2018
Current Basis 1A
Original Filing Basis 1A
Owner (APPLICANT) Google LLC LIMITED LIABILITY COMPANY DELAWARE 1600 Amphitheatre Parkway Mountain View CALIFORNIA 94043
Type of Mark TRADEMARK
Register PRINCIPAL
Live/Dead Indicator LIVE
As such, since the Go name is "protected" then the language itself is "protected" even if the protections allow you to contribute your time to Google's language.
Exactly. You're making my point for me.
You can fork Go, call it Glag, and you will have a language that is interoperable with Go. In fact, it is Go - you just changed the name. And this is perfectly OK to do.
If I take Spanish, rename it Bogolog, and start speaking Bogolog around Madrid, people will understand me. Why? Because it's the same language they're speaking, I just changed the name.
The language is not the name.
(Also there is discussion of this point in comments to TFA)
If they decide on their own formidable intellect they want something they do it, and if they can be convinced by others intellect they may do it, but simply wanting it is not enough to get over their bar.
Pike is more curt. But I think both of them stand by a principle: Don't waste our time.
Oh, the irony
It's not obvious to figure out how Go "plays with others". And it's unclear if that's much of a risk or not. As an outsider, you read of the funky module system duality and you wonder... "What if I don't want to 'work like Google'? Will this work in the future?" It's actually not that clear.
It's weird, because I don't get this sense, for example, with Kotlin projects in Android. You can write Kotlin in Android Studio. Or, in IntelliJ for backend code with Spring. And the tooling seems to be oriented in the same way. For most devs I've met, you can just swap Kotlin for Java, and everything else just works the same, and they don't get lost. You never have this sense of "well... _Google_ does it _this_ way..." when it comes to the tooling.
How is it a risk? Is Rust at risk because of Mozilla? What about Java given all its corporate sponsors?
People need to stop with this predictive FUD crap, it's tiring.
I can't even fathom the amount of relentless bullshit that teams of big projects have to endure.
You really get a sense of "this is Google's approach" with the go toolchain, because it's pretty unique. One of the first documents, "How to Write Go Code", sets up a workspace that doesn't clearly integrate in with any other toolchain I'm aware of.
So, just by reading about the ecosystem, it's not clear who is really investing in it, and, you have a single, unique approach to tooling apparently dominating.
I just wonder if these arguments would be mitigated if Go ever got the investment in "developer relations" that other Google projects get, with some better onboarding documentation.
For someone coming from a different ecosystem, it would be a big jump.
Kotlin and the community version of IntelliJ came along _way after_ the Android toolchain was already available, and Google basically shifted gears and adopted it. Android Studio switched from Eclipse to IntelliJ, and Kotlin is now a default language.
I just don't see that kind of change ever happening with Go. There's no "other voice". It feels like it's "Google with a few enthusiasts".
In practical terms, however, this means governance has to eventually flee the bounds of its corporate origin.
EDIT: Whenever I make this claim here it gets downvotes, but I've never heard anyone explain why - anyone care to explain?
In theory. In practice, a fork on that scale rarely happens because it would require a large part of the community to adapt, lots of supporting services to switch etc, which is unlikely to happen unless it's a major issue like "oh btw we're shutting everything down next month". Convenience keeps developers with how it's currently working, and developers are the community.
Because most will (sooner or later) become incompatible as goals diverge. You're right that it could happen, but I don't see it as likely, be that a programming language or a tool.
By the way, what did you mean by "the corporate origin of governance"?
Edit: I second the call for more discussion on this. I think parent is making a valid point that doesn't merit an off-hand rejection by downvote.
Also, there were some serious intellectual property disputes in the early history of Unix, which you're ignoring. Things are better now, but it's not something to be taken for granted.
So what about the scientific method? What about custodian oversight?
Wait, why not? The majority of people in control of what Go is work at Google. Seems like a pretty clear definition to me.
This has business decision implications. Those who have had issues with Oracle and Java may want to take note because this is a similar setup. To use Go means you need to trust Google.
I'm not disagreeing with Ian and I'm happy he posted that. There is just more to this than technical considerations.
I for one will be curious to see if the breaking changes currently sitting on master (there are issues for them) end up in a release. The governance can play into the stability of the language which is a pretty hard dependency.
Also, by that logic we shouldn't use Linux since a single man gets to pick what goes into the kernel. Same for most relevant tools which are mantained by a few individuals.
> https://utcc.utoronto.ca/~cks/space/blog/programming/GoIsGoo...
Thanks for the link. There is clearly a real sense in which Go is Google's language. But I think I would like to emphasize some points that don't necessarily contradict the blog post but may add some nuance.
I'm a member of the Go team and I'm employed by Google. I'm speaking exclusively for myself here, not for Google nor for the Go team.
I've worked on free software for my entire career, before I joined Google and indeed before Google existed. I think it's fair to say that Go is an open source language. All the source code, including the source code for all the infrastructure support, is freely available and may be reused and changed by anyone. For software the most fundamental freedom is freedom to fork: freedom to take an existing project in a new direction. People have that freedom with the Go language. They don't necessarily have the freedom to call that forked language "Go" (I'm not sure), but I think that limitation is OK; it serves nobody to call different projects by the same name.
The blog post starts by quoting @kapoorsunny asking why there can't be something like OpenGo, with a community implementation of generics. I hope that it is clear that the answer is that there could be. Nothing prevents that from happening. In particular, Google doesn't prevent that from happening.
So when someone says that Go is Google's language, they must mean something else.
For any free software project, there is a set of people who can commit changes to the project. For the Go project, that is the set of people who are on the approvers list, who can click the +2 button in Gerrit. I don't think this list is publicly visible for anybody is not an approver, but I just took a look. Since some people who work at Google use their personal e-mail addresses I could have made a mistake, but I count 59 Googlers on the committers list and 51 non-Googlers.
So while Google is the majority, it's not an overwhelming one. Again, this can't be what it means to say that Go is Google's language.
A programming language is a type of shared software infrastructure. It's most useful when everybody is using the same language, so code written by person A can be reused by person B. That means that programming languages are most useful when we all agree on exactly what the language is. All successful languages have either a single specification or a single primary implementation. (Go and C++ are examples of language based on a specification; Perl, at least before Perl 6, is an example of a language based on an implementation). These serve as the definition of what the language is: whatever the specification says or whatever the implementation does.
I think most people would agree to all of the above. Now some opinion, where people may disagree.
If a language is to change over time, this specification or implementation must change. Somebody has to decide how changes will be made. All successful languages have a small set of people who make the final decisions. Many people will provide input to this decision, but no successful language--indeed, no successful free software project of any sort--is a democracy. Successful languages pay attention to what people want, but to change the language according to what most people want is, I believe, a recipe for chaos and incoherence. I believe that every successful language must have a coherent vision that is shared by a relatively small group of people.
As I said, that is my opinion, but I think it's true. I would be interested to hear of a counter-example.
Since Go is a successful language, and hopes to remain successful, it too must be open to community input but must have a small number of people who make final decisions about how the language will change over time.
So, I think that when the blog post says that Go is Google's language, what they mean is that Google makes those final decisions.
Now a bit of personal history. The Go project was started, by Rob, Robert, and Ken, as a bottom-up project. I joined the project some 9 months later, on my own initiative, against my manager's preference. There was no mandate or suggestion from Google management or executives that Google should develop a programming language. For many years, including well after the open source release, I doubt any Google executives had more than a vague awareness of the existence of Go (I recall a time when Google's SVP of Engineering saw some of us in the cafeteria and congratulated us on a release; this was surprising since we hadn't released anything recently, and it soon came up that he thought we were working on the Dart language, not the Go language.)
Since Go was developed by people who worked at Google, it is inevitable that the people who initially developed Go, who became the core Go team, were Google employees. And it happens that of that core Go team, while not all are actively working on Go, none have left Google for another company in the years since.
I do think that due to Go's success there are now Google executives who know about Go. Google as a company is doing more work with Go at a higher level, supporting efforts like the Go Cloud Development Kit (https://github.com/google/go-cloud). And, of course, Go is a significant supporting element for major Google Cloud projects like Kubernetes.
But (and here you'll just have to trust me) those executives, and upper management in general, have never made any attempt to affect how the Go language and tools and standard library are developed. Of course, there's no reason for them to. Go is doing fine, so why should they interfere? And what could they gain if they did interfere? So they leave us alone.
In effect, then, the current state is what the blog post suggests at the very end: final decisions about the Go language are made by the core Go team, and the core Go team all work at Google, but there is no meaningful sense in which Google, apart from the core Go team, makes decisions about the language.
I do think that it will be interesting to see what happens if someone on the core Go team decides to leave Google and but wants to continue working on Go. And it will be interesting to see what the core Go team, including me, decides to do about succession planning as time goes on. Being a core Go team member is a full time job, and many people who want to work on Go full time wind up being hired by Google, so it would not be particularly surprising if the core Go team continues to be primarily or exclusively Google employees. But even then it's not clear that Go will be Google's language in any deep sense. It's also possible that someday it will become appropriate to create some sort of separate Go Foundation to manage the language. I don't know. We'll have to see.
As I said initially, none of this necessarily contradicts anything in the blog post, but perhaps it gives a slightly different perspective.
In this note I've specifically focused on whether Go is Google's language. I have some thoughts on other aspects of the blog post, about its discussion of the interaction between the core Go team and the rest of the Go community, but this note is already too long. Perhaps I will tackle those later. Or perhaps not, no promises.
Ian
OK, yes, it is Google's language. But it's OK because someone has to control it after all, and Google is doing it well. And anyone could fork it if they wanted to.
(I don't mean to suggest I agree or don't agree, just trying to understand and state the main points.)
And it's usually problems people are solving are work that instigate most of these contributions, so it's a damn good thing Go has a company like Google to act as steward, regardless of all the useless FUD people like to pretend "may" happen because they can think it up.
At least that is how it reads.
So you don't get to be angry that the things open source projects need - strong cores - usually come in the way of companies paying for them.
Go having Google is a good thing, regardless of all the pointless stupid FUD people like to spread because it makes them feel better to point out something that could be scary.
Your arguments are deeply cargo cult-ish: they lack any rational train of thought and boil down to an empty belief on how a greater power will eventuall deliver good things to those who have faith in it.
What does that even mean? It's such a ridiculous statement, don't even know where to begin.
> they lack any rational train
Care to back this up with facts rather than slinging mud?
It makes sense if you think about it: how many companies adopted Go because they saw that it had Google's name on it?
Even if you don't mind if the language itself stops evolving you still need somebody to maintain it. I'm fine coding in C99 without the features of newer standards but if I can't find a C compiler that can efficiently target modern architectures I have a problem.
That being said, Go is mainstream enough that, if Google EOLs it, the community will pick up the torch. Simias says its harder for Go than, say, Rust. It probably is.
I'm pretty sure those writing and building software today would like it to build and run 6 months from now.
Also Go will be fine. For example the Windows version of Go was all implemented by the Go community. The core devs were only focused on Unix and Mac at the time. I think Go will be fine.
People love the language and its being used by many in industry. Just look at Docker and other utils coded in Go. If you download Chrome or Android SDK / images from Google you are using a Go server to download those files.
There is no "just let me see the content, I can't be bothered to type my password right now" option, there is no "forget that I'm that user" option, the only option is to log in or to go incognito.
https://www.mail-archive.com/golang-nuts@googlegroups.com/ms...
And I'll note that from what I can tell, forum software predates mailing list software. LISTSERV only goes back to 1986. [2] Forum software goes back to the mid-1970s [3], and the WELL was started in 1985 [4]. So I think it's reasonable to argue that online forums are the "real" experience, and mailing lists were more an implementation constraint for the decade or so that email popularity outstripped the richer interfaces of the terminal era and the web era.
[1] http://www.lsoft.com/corporate/history-listserv.asp
[2] https://en.wikipedia.org/wiki/LISTSERV
For early BBS's it was routine to create an account before doing much of anything, though they often didn't verify anything. I think some had a limited anonymous account you could use?
Was there anything before gopher that let you seamlessly jump from machine to machine?
Basically signing over rights of what you contribute to the company running the project.
Even the linux kernel has a CLA, they just call it by another name (Developer Certificate of Origin)
Node had a CLA, but it was removed in 2014. It does have a "Certificate of Origin", which you claim is the same as a CLA, but I beg to differ. The issue here is that CLAs generally require you to reassign copyright; the Certificate of Origin does not. That's the part of CLAs that the OP is taking issue with.
Who is the single beneficiary of special rights granted under the DCO? CLAs provide a single party with rights nobody else has.
First it forced me to log on. Ok I did that. After which the redirects lost the deep link, so I reached a generic landing page. I tried going back but there were more redirects which made that difficult. I finally came back to HN and clicked the link again. Then a spinner came up but didn’t load. A few reloads later and I got a few characters but nothing useful.
What a mess.
Hey googlers remember a cool little thing called the URI? Can we make that just work again without all this session/auth nonsense wrapped around everything? I am not interested in your accounts.
It should display correctly on the 10-year old webkit engine.
https://groups.google.com/forum/m/#!topic/golang-nuts/6dKNSN...
This works fine without javascript.
https://groups.google.com/forum/?_escaped_fragment_=topic/go...
Not GPL. Therefore it doesn't matter. Some corporate overlord has the power to kill/modify at whim.
GPL(2.0) for comparison: https://www.gnu.org/licenses/old-licenses/gpl-2.0.txt
Compare that to Apache 2.0's 2nd and 3rd clauses:
"2. Grant of Copyright License.
Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
3. Grant of Patent License.
Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed."