[this is not a proposal yet, just a problem statement]
There are several proposals to add new packages to the x/foo
"sub-repositories". (See: #16353, #13432, #12332, #16257, #15985, #15406, and more.) The proposals are all different, but they circle around the same issue: what should and should not be in a sub-repository.
Currently, the sub-repositories contain x different things:
To me, it's clear that 1-2 belong in the sub-repositories, and should be an official part of the Go project.
For 4-5, this code only lives in the sub-repositories either for historical reasons or mere convenience. The Go contributors are accustomed to the process (tools and reviews) of writing code in that style, so the sub-repos were just the obvious place to go.
(3 is a fringe case, as the tools could be worked on elsewhere, but the people working on them work on Go full time and work on that code solely to support the project, so I am inclined to ignore this code for the purposes of this issue.)
As the project grows, it attracts people who want to contribute new packages to these sub-repositories (see the issues cited at the beginning of this issue). The reasons for inclusion include:
[What are the other reasons? I'd like to enumerate them all here.]
My opinion begins here:
None of the above reasons are good arguments to add new packages to the sub-repositories. Taking each in turn:
[see discussion below for other points]
In general, I'd like to make the Go project smaller rather than bigger. (In the same sense that we would remove stuff from the standard library, if we could.)
As I said, this is just my opinion and perspective. I have created this issue to gather feedback from other [potential] contributors.
Personal opinion ends.
We need to set a policy for what belongs in the sub-repositories, and in doing so more clearly define the boundaries of the Go project.
Nice summary. Thanks for writing this up. I agree with your opinion too.
I have a very different opinion. I think there is significant value in having a set of "semi-blessed" packages, and random packages that can be found (more or less easily) on godoc.org do not meet that bar. I think one of the big reasons that languages like Python have taken off is that they are "batteries included"; their ~standard libraries include a wide swath of functionality, such that the average program can be written without adding any third-party libraries. If anything, I think more should be included than we have now.
I think the x repos today have already improved on the "batteries included" model, by making it clear that "these are good packages, but they're not great packages, and we don't make as many promises about them". I would actually like to see a future where we include a snapshot of the x repos in release tarballs, attaching the same disclaimer.
I see your proposal as directly advocating for fewer packages in x. I disagree that that is a worthy goal.
That said, I don't think that #2 and #3 necessarily have to live in the same place as #1 and #4. I would be happy to separate the "random part of the Go project" repos from the "semi-blessed packages" repos.
@quentinmit I think we absolutely do need a way to tell people "these are good packages" and I think that is what @adg was alluding to with his point 4 above. The question is what that mechanism should be.
The disadvantage I see with the current golang.org/x system is that these packages are effectively owned by the core Go developers. That isn't scalable or even desirable. If we can solve that problem within the golang.org/x name space, then, fine. But how? And who controls the golang.org/x name space?
I think it would be better to have a scalable mechanism for identifying and maintaining good packages, and I don't see why that should be, or even can be, associated with golang.org/x.
Great summary of the issue. What @bradfitz said.
As a consumer of many third-party packages, I think I agree with @quentinmit (or at least with @ianlancetaylor). If I need a package for $task and there is an /x package for $task, I've generally found that while it might be incomplete, it's usually of high quality (the scope and style matches the standard library; the test coverage is quite good; the documentation is thorough and concise). If I have to go browsing through $task packages on godoc.org and pick the best one, it's often of such poor quality that I either do an extensive cleanup/refactoring/testing/docs pass before bringing it into my repo or else I choose to write my own package instead.
@adg said:
_I'd think we should address this issue by making it easier to find and recognize high quality packages._ (One way to do this is to improve godoc.org, but there are many other ways.)
but I'm skeptical that a process outside the Go team will produce a quality bar that is usefully high for me.
I'd like to see [high-quality package identification mechanism] exist and be proven to work well before any trimming down of /x.
If I have to go browsing through $task packages on godoc.org and pick the best one, it's often of such poor quality that I either do an extensive cleanup/refactoring/testing/docs pass before bringing it into my repo or else I choose to write my own package instead.
I'm advocating that we fix _this_ problem.
I'm skeptical that a process outside the Go team will produce a quality bar that is usefully high for me.
The "Go team," such as it is, is only a handful of people, and they do not have the cycles to review any new packages. If you want more packages in x/ then they must be written, reviewed, and maintained by other people. That being the case, there's no reason why they should be in x/. They're not going to be any better or worse for it.
@quentinmit said:
I think one of the big reasons that languages like Python have taken off is that they are "batteries included"; their ~standard libraries include a wide swath of functionality, such that the average program can be written without adding any third-party libraries. If anything, I think more should be included than we have now.
Both Python and Go have suffered from having large standard libraries, too. In some cases, the standard libraries have become out of date and superseded by other packages in the ecosystem (or in the case of Python's urllib, by urllib2 in the same standard library!). Then we're left with prominent packages that are not suitable for common use. That's a net loss for our users.
If I understand your sentiment, you're advocating for including (a lot) more packages in the x/ repositories, as an extension to the standard library. Producing our current standard library (not the sub-repositories) was a massive concerted effort over many years, by people who are mostly domain experts in the functionality of those packages. I have two main questions:
From my perspective, being able to work under an x allows me to reach out to the go approvers and this is what I care when I am designing ecosystem-wide core libraries for a niche topic. I don't think it is possible once the experimentation is not considered a part of the Go project.
To expand a little on my goals here: by defining what does or does not belong in x/, I hope to remove bureaucracy.
Today, if someone wants to put something in /x/exp they need to ask permission. People shouldn't have to ask for permission to experiment; that has a chilling effect on experimentation.
Similarly, if something is to be included in an /x sub-repo, they need to ask permission. Why should they? Shouldn't they be able to put their high quality code in a repo somewhere else, and have it be regarded just as highly as anything in /x? Code should be judged on its own merits, not by its location.
I'm not sure I think I would agree with "a lot", but yeah, I think x/ should perhaps be twice the number of packages it is now.
- Who is going to do this work? How do you propose we maintain the same quality level across many more packages that our well outside our areas of expertise?
Go project members will do the work, just as they do today. The people who are proposing these new packages are working in their area of expertise. But I also don't think it's "outside" our areas of expertise; our area of expertise is designing idiomatic Go APIs, and that can be equally applied to something like video compression as it can to XML or JSON marshalling.
- Why does it need to go in x/? Why should we be the arbiters of which packages are prominent? Aren't we short-changing the ecosystem by neglecting third-party package support?
That's a hard question. For me, I have a soft definition of "low-level" support packages that I think deserve to be centralized. To use an example I am personally familiar with, I think video and audio formats should be in x/video or x/media, ala the current image support we have in x/image. I think a streaming server built on top of those libraries, or a GIMP clone, does not belong in x/ because that is not something foundational.
I do think making high quality third-party packages easier to find solves a large part of this problem, but we are not there yet. And even if we do make them easy to find, packages that are separate from Go still have more adoption problems we can't possibly solve: for example, they may be under various licenses, and it may be cumbersome to import into a commercial codebase. That may be appropriate for a library to interface with a Siemens PLC from the 1990s, but I don't think it's appropriate for OpenGL.
Go project members will do the work, just as they do today.
The reality is that there are hundreds of open CLs (some pending for more than a year) and thousands of open issues. The work is not getting done. The present structure does not scale. To encourage more development that we cannot support is irresponsible and unfair to the contributors.
I do think making high quality third-party packages easier to find solves a large part of this problem, but we are not there yet.
My argument is that we will never get there if we use the sub-repos as a crutch.
From my perspective, being able to work under an x allows me to reach out to the go approvers and this is what I care when I am designing ecosystem-wide core libraries for a niche topic. I don't think it is possible once the experimentation is not considered a part of the Go project.
I think external packages will see more high quality reviews if they are more prominent. Everyone in the ecosystem has an interest in improving the most useful (and used) packages.
has an interest in improving the most useful packages
You are mistaking your experience on the high-level community-driven packages with fundamental packages. For example, no one in the community will find debating a low-level audio API on a personal project useful or productive given there is no arbiter or a person who has an authoritative final say. I support structure, your proposal suggests distributed chaos and blessing of the popular because it is more successful.
The role of the Go project should be to review and bless fundamental things, especially the APIs. And that's where the proposal system can be sufficient enough. If the Go project doesn't have bandwidth to maintain the proposed package, the proposal should be frozen for bandwidth reasons. The ideas can keep been communicated on the proposal even though multiple implementations can live in people's personal projects.
The current state of the x packages is not what I support. But, throwing people out of the project because the core people doesn't have bandwidth is not a solution. No one ever desires a language ecosystem dominated by broken third-party solutions like Node's or Python's, but languages evolve there. I worry that it is happening for Go so soon.
Also people who are +1ing this proposal who has all the privilege to merge their stuff to Go should better be quieter on this one. This proposal is not going to affect your daily interaction with the project. It is about the contributors who are spending their weekends to contribute to the various parts of the project. We should ensure quality is preserved without discouragement. I would like to hear more from the actual part-time contributors and I am devastated by "+1, ship it" type one-line responses.
Never contributed, but use packages in /x. I'd rather it be well maintained than well stocked. Frozen packages in the stdlib are annoying enough.
no one in the community will find debating a low-level audio API on a personal project useful or productive given there is no arbiter or a person who has an authoritative final say.
I don't think that's true. For example, @peterbourgon has had great success with his go-kit project, attracting people to do high level design work. I could be wrong, but I don't think you'll see much difference between participation at "github.com/goaudio" or "golang.org/x/audio". I personally would be just as interested either way.
The role of the Go project should be to review and bless fundamental things, especially the APIs. And that's where the proposal system can be sufficient enough.
To repeat what I think you said: the equivalent of package io
for audio or video could live in a sub-repository of the Go project. Those are small but require careful review and pride of place. The packages that use those interfaces must not necessarily live in the sub-repos.
I agree with this completely.
I would like to hear more from the actual part-time contributors and I am devastated by "+1, ship it" type one-line responses.
I am sensitive to your concerns about "throwing people out of the project". That's certainly a non-goal, here. But, for the record, nobody has said "ship it" because there is nothing to ship. Brad and Robert have agreed with what I said, but nobody has proposed any kind of policy yet.
I too would like to hear from more contributors (or potential contributors), particularly to expand upon the list of reasons that code should live in /x, and where people think the line should be drawn.
go-kit project
I don't think go-kit a foundational package. It is a very high-level library to do certain things in a certain way and is very successful in its domain. A foundational package is a core network protocol implementation, a core abstract (io package abstractions), an open standard implementation, an industry-wide standard, etc.
Those are small but require careful review and pride of place.
I totally agree with that.
I think one of the Go project's goals should be prioritization of requirements from the language and collaborating with experts to review designs. This proposal should address that aspect before being finalized.
Brad and Robert have agreed with what I said, but nobody has proposed any kind of policy yet.
Well, ok. I am just a bit worried when influential people are on the threads without arguments. Because it influences which side people lean towards in the end.
I added a 5th bullet to the list of reasons in the first post.
@rakyll I'm sorry, I don't understand the reference to throwing people out of the project. I hope that nobody is suggesting that.
I agree that we have a problem. I've been talking to people about this problem for years. I don't have a solution. I'm not aware of any language that has a good solution. Other languages have varying solutions of varying quality. None seem clearly better than what Go is doing, which is basically godoc.org.
I think that golang.org/x is not a solution. I think it's basically exclusionary. It privileges the packages that the core Go team happens to care about, and relegates the rest to limbo. That doesn't scale.
But letting all packages into golang.org/x also doesn't work. The end result of that is basically what we have today--an undifferentiated list of packages of varying and unknown quality, but with different package names.
What we need is some way to identify quality packages. That is the problem. It seems to me that golang.org/x is not the solution to that problem.
But I could of course be wrong. Perhaps golang.org/x is the solution. But not as it exists today; it has to be different. So how do we change it to make it work?
Thinking of #16218, could CLA clarity as a reason for inclusion in golang.org/x use a callout here? Perhaps that falls under reasons 4-5 already.
@rakyll Sorry for simply repeating @bradfitz 's and thus @adg 's words. I don't have a solution either, but (repeating what's been said before) as the sub-repos are used now, they imply some form of "approval" by the Go team, yet they have essentially historically grown. In fact, several packages from the std/lib landed in sub-repos (for lack of a better place) when we cleaned up the std repo a few years back. And I have "stuff" in there (x/tools) which perhaps should be elsewhere.
I'd love if our sub-repos were blessed somehow and of high quality and maybe even maintained by us (if we could). But it doesn't scale and it's not necessarily even good for the community.
I agree w/ @ianlancetaylor that some mechanism to qualify and identify high-quality packages would be a much better solution. The question is how to do that. The Go team has neither the manpower nor the expertise (we don't have domain experts in all areas) to do that at scale.
Perhaps part of the solution is to bless a location where such high-quality packages land in the first place, and then come up with a process to rate them.
Also people who are +1ing this proposal who has all the privilege to merge their stuff to Go should better be quieter on this one. This proposal is not going to affect your daily interaction with the project.
I disagree. I spent a significant amount of my time, over a number of months, on design and code reviews for golang.org/x/mobile/audio (later moved to golang.org/x/mobile/exp/audio). This was time I wasn't spending, day to day, on my other work.
I spent my time this way because, as @cespare alluded to above, there is a community expectation that anything under golang.org/x is of high quality. I was also actively working on golang.org/x/mobile at the time, and a number of people have said that they'd like an audio or audio/visual or media Go package to have pluggable codecs the way the standard library's image and image/* packages works and, well, I designed and wrote those image packages.
You say that "being able to work under an x allows me to reach out to the go approvers" and sure, that's a benefit for you, but it is a cost for the Go approvers. If it's easier for everyone to demand @bradfitz's attention for anything potentially under golang.org/x/net, or @ianlancetaylor's attention for anything potentially under golang.org/x/sys, then that's less attention that they could spend on e.g. landing HTTP/2 support, or keeping gccgo up to date. It is not a free lunch, and as others have said above, it doesn't scale.
It's true that golang.org/x/exp/... (and similar paths like golang.org/x/mobile/exp/...) have lower quality and support expectations than the rest of golang.org/x, but my opinion is that the right response is to move those packages out of golang.org/x, rather than add more exp packages.
I largely agree with Quentin here. In my experience, having a solid base of fundamental libraries is key to being productive in a language. Look at Java, Objective-C/Swift, .Net. All have comprehensive standard libraries.
adg's reasons for inclusion have a lot of positive sides too:
I understand that the Go team does not have enough cycles. But in my opinion, a blessed package model doesn't scale for users and will hamper Go adoption.
The solution, I think, should come from scaling the subrepo approach, maybe by using a hybrid form. Here are some thoughts:
To have a good quality list of "blessed" packages will either be also a lot of work (verifying APIs of probably more packages than you would normally include in an x subrepo), or it will inherently mean it will be of lesser quality than an official list. If it _is_ of the same quality, it still can never instill as much trust as confidence as an "official" list, unless we include "blessed" packages in an official release, which seems even more work to me. Even worse, never having had "official" subrepos is one thing, but giving them up is a clear signal of throwing in the towel. So to me, trying to reduce/spread the burden of maintaining golang.org, rather then shedding it, seems crucial.
disagree. I spent a significant amount of my time, over a number of months, on design and code reviews for golang.org/x/mobile/audio.
The mobile package is planned and executed by this team as an experiment. The entire thing should have never been under /x. As this proposal calls out, there are a few packages under this category and should have been bootstrapped elsewhere, e.g. how bradfitz bootstrapped http2 outside of the tree.
sure, that's a benefit for you, but it is a cost for the Go approvers.
I thought this discussion already acknowledged the bandwidth issue. What @adg asks for is how others are affected by such a policy and it is very critical to understand what a proper solution to community-driven packages might look like.
I mentioned "being able to work under an x allows me to reach out to the go approvers", because it is a necessity. If people were able to escalate a couple of API sanity questions to a group of people they trust, they wouldn't care where they bootstrap or maintain their packages. This is an actual requirement, please don't dismiss it by repeating what we already know.
And that's not a benefit for me. It is a benefit for the language to allow different people collaborate on a medium and escalate things about API review.
adg mentions "/x" being prestigious but I disagree. In my unique experience, /x is a very invisible point. There is no true benefit someone is contributing a package to /x if they don't care about the quality or design feedback.
Before I finish, I want to say I really appreciate what @ianlancetaylor and @griesemer suggests. We may need a successor plan or strategy and think about the indicator of quality. The ideal location where these packages bootstrapped or maintained might not be /x, but organizing the distributed effort towards enhancing the Go library-space should be a critical project on its own.
Regarding the reachability of Go developers and comfort of using the typical Go tools for development, would it help if I finished up my @letsusegerrit bot so any repo on Github could use the Gerrit code review process?
I think Gerrit might not be critical given Github PRs are becoming better. How people reach out to quality reviewers might be a more interesting problem. Would it be a reviewers mailing list? If so, how to communicate it is entirely voluntary work? Should it come from the Go project or driven by the community? I have some ideas but don't have any concrete proposals at this point.
My (subjective) impression is that the burden of being responsive and reviewing code is burning out core team members. Is that true? If so, I think it's a significant factor for consideration.
My (subjective) impression is that the burden of being responsive and reviewing code is burning out core team members. Is that true?
I can't speak for _everyone_, but it's true for me and I know it's true for others on the team.
@zellyn, yes. I'm starting to burn out. It's gotten exhausting the past year or two.
@ianlancetaylor wrote:
I'm not aware of any language that has a good solution. Other languages have varying solutions of varying quality. None seem clearly better than what Go is doing, which is basically godoc.org.
For C++, the Boost project has served as a proving ground for libraries that might eventually make it into proposals for inclusion in the standard library. The libraries usually have to shrink (shedding features) and bend under the second phase of criticism from committee members. I've witnessed @davecheney preparing for this process with his _pkg/errors_ library.
The downside of an external proving ground like Boost is that people start using the "outside" version of the library, which is a necessary part of vetting it, and may never be able to afford to port to the "standard" version that makes it in much later. The world winds up with two versions in use, even when the goal was to only have one.
To scale kernel development, Linus named Trusted Lieutenants as guardians of different subsystems. @rakyll's idea for creating "Trusted Gophers" available for code review for external projects is an interesting one. However, it's hard to do code review without context. It's easy to comment on style and naming, but hard to discuss design without understanding the problem domain. Drive-by reviewers provide only superficial help here. Dealing with reviewing "yet another" web framework or whatever will also get tiring. I think this deserves more discussion, but possibly in a different forum that this issue.
Dealing with reviewing "yet another" web framework or whatever will also get tiring.
For the record, this is for the foundational packages. Not for yet another web framework but for a COAP or a USB package for Go. I am not proposing to establish a general-purpose support group.
It's easy to comment on style and naming, but hard to discuss design without understanding the problem domain.
Then it seems to reason the "Trusted Gophers" should each be responsible for only one portion of whatever the Go "subsystem" is defined as.
Gopher A who has a knack for math can review all the new math libraries.
Gopher B who prefers interfacing with USB drives can review the USB device code.
Gopher C who really loves pre-historic protocols can review the new Gopher and Finger code.
I agree with others in that when I need to do _X_, I usually turn first to the stdlib, then x/, then godoc and Google. While not everything in x/ is usable (to my liking), I've found a lot less "surprises" inside x/ than I have casually browsing godoc or Google. Great post, @adg.
If the problem is burnout, then consider there is a hidden cost to the "trusted" approach. People need to be responsible to train, mentor, and guide newly "trusted" individuals into doing the right thing, at least to the existing standards, to the point where eventually they need no oversight. This will introduce some lag time initially as those who train the new folks will be pulling something of a double duty.
You might say that only folks who don't need oversight would be picked, but this is not realistically possible. The greatest engineer in the world still has ramp up moving into a new system or a new codebase.
Ultimately, I disagree with seeing Go get "smaller" as a result of these issues. I want to see Go get bigger. I want a standard library (even if it has different tiers of service or guarantees) that feels large and inclusive. Especially with Go, where the community ethos is always to do as much as possible with the stdlib before reaching out to a dependent library.
Solving the human cost issues and making it so these things aren't so taxing on the current team (whether that is a process change, the "trusted" approach, or some other solution) sound a lot more palatable in nature to me, someone who uses the language and wants to continue to see it grow, than the alternatives.
But i recognize that the reason why the core maintainers want it smaller is because it is likely _exhausting_ to try and keep up with all of these changes / proposals / etc. But in my (likely uninformed) opinion, closing off or making it harder to put new things into the stdlib is a step backwards. The strongest part of Go is the community itself, and the community desperately wants to be involved in helping to shape the future of the language.
@adg Additional reasons for code in the x repos:
I echo @griesemer
Perhaps part of the solution is to bless a location where such high-quality packages land in the first place, and then come up with a process to rate them.
Would the go team have the bandwidth to do high level API approval and package scope approval? Approval would have a certain scope, but then actual reviews and work would be community driven. If someone wanted to have a GUI widget library, a new package wouldn't get approved, rather they would be instructed to go talk to the ext/shiny contributors.
edit: but to be clear, I'm not directly advocating more packages go into an x like repo.
@StabbyCutyou said:
But i recognize that the reason why the core maintainers want it smaller is because it is likely exhausting to try and keep up with all of these changes / proposals / etc.
Well, yeah. It's not just that we're exhausted, but also that we're falling behind, with no end in sight. Your proposed solution just creates more work for those people, therefore it is not a solution, as it will never happen.
The strongest part of Go is the community itself, and the community desperately wants to be involved in helping to shape the future of the language.
This isn't about the future of the language. It's about libraries. IMO if high quality libraries cannot thrive outside the project itself, then the language will have failed. How could any of today's major languages succeeded without high quality external libraries? We're not going to get there by gatekeeping.
@kardianos thanks for those extra points. I've added them to the list. My opinion on them:
To use the same consistent license (with CLA) that the project uses.
I think we could solve this in a more scalable way by setting a community standard for code licensing. There could even be a little badge/icon with a gopher wearing a judge's wig.
To provide a single package for a single purpose, and avoid duplicate effort.
I'm concerned about what happens when better work is done elsewhere and then the package in /x atrophies. This already happened with websocket, where the package in /x/net is not the best implementation, but people use it because it's there. Efforts to replace it have stalled for years. IMO, this is more evidence that the centralized repo approach does not scale.
@adg I agree with both of those responses. Thanks.
@adg to be clear I didn't really propose any solution (unless you were referring to making Go "bigger", which I would agree is not a solution to anything, but rather an opinion) - in fact I tried to lay out why one of the proposals (the "trusted gopher" approach) would create some of the additional overhead you mention (at least, at the outset). Apologies if that was not clear enough.
W/r/t it not being about the language, but rather about libraries - I was responding particularly to your comment about shrinking go / removing things from the stdlib (if you were able).
I was definitely not stating that well maintained libraries can not exist outside of the core lib. I would imagine you'd be hard pressed to find anyone who has that opinion. On the contrary, one of the strengths of a community driven package is that it can grow and change at a pace that Go is unable to.
Go has a lot of really strong libraries that come out of the box - as a developer (and not also as a language maintainer like yourself, which is where I imagine our perspectives differ), the idea of seeing Go "shrink" in this capacity would be disappointing. It also feels somewhat at odds (in my opinion) with a community mantra of relying on the standard lib as much as possible before reaching outside of it for a dependency.
As I do not have any solutions or improvements to offer, but just opinions, I'll bow out of the discussion as I'm likely just a distraction. I appreciate your reply.
@StabbyCutyou thanks for clarifying. It's hard to divine the context behind everyone's posts, and I'm sure I misinterpreted you. Sorry. 😦
Go has a lot of really strong libraries that come out of the box - as a developer the idea of seeing Go "shrink" in this capacity would be disappointing
When I talked about taking stuff out of the standard library I was referring to things like net/rpc
which was an early experiment and is now clearly inadequate as a production rpc mechanism, having been superseded by several other rpc systems.
Gotcha. That makes a lot of sense.
No worries on the misunderstandings! Appreciate all the work the go team
does, I know it can't be easy.
On Sep 29, 2016 6:36 PM, "Andrew Gerrand" [email protected] wrote:
@StabbyCutyou https://github.com/StabbyCutyou thanks for clarifying.
It's hard to divine the context behind everyone's posts, and I'm sure I
misinterpreted you. Sorry. 😦Go has a lot of really strong libraries that come out of the box - as a
developer the idea of seeing Go "shrink" in this capacity would be
disappointingWhen I talked about taking stuff out of the standard library I was
referring to things like net/rpc which was an early experiment and is now
clearly inadequate as a production rpc mechanism, having been superseded by
several other rpc systems.—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/golang/go/issues/17244#issuecomment-250611740, or mute
the thread
https://github.com/notifications/unsubscribe-auth/ABdTKpKnYsZWcDEon8TQxSVQpQK5b7_4ks5qvD11gaJpZM4KHJNI
.
Despite the many problems with how the Linux contributing process is setup, I do think one of the "Things That Works" is the concept of subsystems and maintainers of those subsystems. This would mean _if_ mobile
was considered a subsystem for go packages, it would have maintainers with expertise in that area. Maybe they wrote the package to begin with. Maybe they have contributed heavily after it was open-sourced. They would not be responsible for anything else (unless they had other expertise and were willing). Same goes for usb
if that is deemed a subsystem.
I agree this shouldn't be for "Yet Another Framework". It should really only be used for low-level core libraries. You could almost make the analogy that "Debian" is not a subsystem of Linux ;) it merely uses it :)
On Thu, Sep 29, 2016 at 12:43 AM, Nigel Tao [email protected]
wrote:
How people reach out to quality reviewers might be a more interesting
problem. Would it be a reviewers mailing list? If so, how to communicate it
is entirely voluntary work? Should it come from the Go project or driven by
the community?...
For the record, this is for the foundational packages. Not for yet another
web framework but for a COAP or a USB package for Go. I am not proposing to
establish a general-purpose support group.If we're talking only about foundational packages (and does that mean that
we've decided that the policy on x/ sub-repos is "foundational only"?),
doesn't the golang-dev mailing list already fulfil this role? It seems like
https://groups.google.com/d/msg/golang-dev/ofaaIJPWRKg/7jX3Qf5hBQAJ is
exactly the sort of conversation that you're looking for.
I am not sure if we can use this channel if this proposal is accepted. If
yes, I wouldn't care about not being able to communicate to the others.
golang-dev@ is the perfect solution to reach out.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/golang/go/issues/17244#issuecomment-250394075, or mute
the thread
https://github.com/notifications/unsubscribe-auth/AAGnXCrAvvp1Eo8HukBUKamdR_yV0KIJks5qu2wSgaJpZM4KHJNI
.
if this proposal is accepted.
What proposal? I want to remind everyone that nothing has actually been proposed.
What proposal?
The current proposal (https://github.com/golang/go/issues/17244). golang-dev will not be a place to create threads about new /x-like library ideas because it will be scoped to the Go project's current development.
@adg:
I'm concerned about what happens when better work is done elsewhere and then the package in /x atrophies. This already happened with websocket, where the package in /x/net is not the best implementation, but people use it because it's there. Efforts to replace it have stalled for years. IMO, this is more evidence that the centralized repo approach does not scale.
Why is this so bad? It just shows that it (unsurprisingly) would be possible to have an outside team have ownership of an x/text library and deliver quality.
This websocket package situation can also be used to show the importance of a central repo. I've used websockets in the past and picked the x/text version even though I was aware of a probably better alternative, because the x/text was good enough and it was not worth the hassle to figure out how the other project was maintained. And I didn't even care about licenses. The main point of having a centralized repository with foundational functionality is speed of development, convenience, and consistency, not that they are necessarily the best. Give teams outside the Go team a chance to own x/text packages (ala Linux) and you can have the best of both worlds.
I've read this thread earlier, and there are 2 comments I want to leave. This first thought is kinda hard to express, I hope I get it right...
It is my personal opinion, as an observer who tries to follow the work done in the Go project, that the Go team should have the opportunity to limit the scope of maintenance and code reviews to the core projects they're working on and anything they're voluntarily willing to take on... I think it'd be really unfortunate if they're unintentionally made to increase that scope by the community trying to add new things to /x packages (which require code review).
There's a clear conflict - it's great to have canonical, high quality libraries for more and more low-level things (like websocket
, usb
, etc.), but it's also great to have the core Go team with a narrower scope, high quality work and ability to spend time where it matters more (core parts of Go).
They've done us a huge favor of open sourcing this project, which I really appreciate, but I think we as a community need to be very careful with the additional responsibility that gives us (that we can increase scope for /x, and the Go team has to deal with it).
I'm very fortunate in my open source work that I can choose to work on and support exactly the things I care about, and not take on things I don't. It's an absolutely amazing feeling. I really want more people to be able to experience it, rather than feelings of burnout and pressure from taking on too much. I will definitely support whatever proposal that lets the Go team reduce scope to being responsible for fewer extraneous things (that they don't take on their own initiative).
I think a nice litmus test for this is... if someone were to report an issue because they found a bug, do you:
This may be naive and optimistic, but I wish we get to a solution where 1. is true more often than 2. for the people on the Go team when it comes to /x packages.
The "Go team," such as it is, is only a handful of people, and they do not have the cycles to review any new packages. If you want more packages in x/ then they must be written, reviewed, and maintained by other people. That being the case, there's no reason why they should be in x/. They're not going to be any better or worse for it.
I completely agree that putting Go code under /x isn't magic, and doesn't automatically make it better if there's not enough people for whom it's a top priority. I don't have a great solution, but I do agree that it's good to think about finding a way to have high quality Go libraries (with proper voluntary ownership) be elsewhere, such that they're still discoverable and trustworthy.
My second comment is a lot easier to write.
Perhaps part of the solution is to bless a location where such high-quality packages land in the first place, and then come up with a process to rate them.
@griesemer, since I haven't seen it mentioned here already, maybe consider https://github.com/camlistore/go4#readme as a candidate for such a place (if its owners are okay with it, of course).
For the record, this is for the foundational packages. Not for yet another web framework but for a COAP or a USB package for Go. I am not proposing to establish a general-purpose support group.
If we're talking only about foundational packages (and does that mean that we've decided that the policy on x/ sub-repos is "foundational only"?), doesn't the golang-dev mailing list already fulfil this role? It seems like https://groups.google.com/d/msg/golang-dev/ofaaIJPWRKg/7jX3Qf5hBQAJ is exactly the sort of conversation that you're looking for.
I am not sure if we can use this channel if this proposal is accepted. If yes, I wouldn't care about not being able to communicate to the others. golang-dev@ is the perfect solution to reach out.
In case anyone is confused, I did write the "doesn't the golang-dev mailing list already fulfil this role?" paragraph as a comment on this issue, but later deleted it as I thought it was derailing the original post, which is about deciding policy for sub-repositories. There already is some confusion: "if this proposal is accepted" was met with "What proposal? I want to remind everyone that nothing has actually been proposed". I suppose that the e-mail went out anyway, and was quoted in full in a reply, so it's been effectively undeleted.
Speaking of the OP, another reason for inclusion would be to provide an official package for interoperating about (but not necessarily doing) X.
For example, person foo might write a flac decoder. Company bar might write an mp3 encoder. It would be nice to have some common interfaces so that the two can plug together. Such interfaces could conceivably be under x/ without requiring either a flac or mp3 package to be under x/.
The existing x/image/math/f32 and x/image/math/f64 packages roughly have this intent. It's not hard for any one particular repository to define useful matrix types, but interop between graphics packages from different repos is awkward unless there's canonical types. I'm not sure if these particular x/image/math/f?? packages have been widely adopted in practice, though.
The current attitude to /net/rpc appears to be "give a dog a bad name the
shoot it ". The favoured "production rpc mechanism" is gRPC which does a
very different job. Its slower, needs a manifest, and does not like
dedicated server port stacks. net/rpc, whether with gob or JSON, ist
working code for us. Please don't sunset it.
On 30 September 2016 at 00:36, Andrew Gerrand [email protected]
wrote:
@StabbyCutyou https://github.com/StabbyCutyou thanks for clarifying.
It's hard to divine the context behind everyone's posts, and I'm sure I
misinterpreted you. Sorry. 😦Go has a lot of really strong libraries that come out of the box - as a
developer the idea of seeing Go "shrink" in this capacity would be
disappointingWhen I talked about taking stuff out of the standard library I was
referring to things like net/rpc which was an early experiment and is now
clearly inadequate as a production rpc mechanism, having been superseded by
several other rpc systems.—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
https://github.com/golang/go/issues/17244#issuecomment-250611740, or mute
the thread
https://github.com/notifications/unsubscribe-auth/AEAf7CaR6guzv4y0cugoj8jdzk6IEr5Cks5qvD1VgaJpZM4KHJNI
.
@rhedile This is not the issue on which to discuss the net/rpc package in particular. That is issue #16844.
@nigeltao I think this
Speaking of the OP, another reason for inclusion would be to provide an official package for interoperating about (but not necessarily doing) X.
is what @rakyll was referring to. I'll add it to the list.
I think that should be in scope for /x, and that it would make sense to eventually move such packages to the standard library.
I put mobile under golang.org/x because it gave us common tooling with the Go project, in particular gerrit and the issue tracker. I think that was reasonable at the time, given that golang.org/x didn't have any clear meaning.
Looking at where @adg is going with this proposal, I suspect it will not belong there any more. (Especially as a lot of us working on it have had our time taken by other projects, it should have a separate issue tracker.) It could move to github.com/google/gomobile, though I will miss gerrit.
I would miss gerrit even more for x/exp/shiny. It would be nice if there were some other place that had the common tools of the Go project but did not come with the fancy golang.org/x prefix (or any other implications of being part of the standard library.)
It would be nice if there were some other place that had the common tools of the Go project but did not come with the fancy golang.org/x prefix (or any other implications of being part of the standard library.)
That is precisely point (4) (in the problem and personal opinion) in the above proposal.
"If people want to use our processes, I think that a better approach is to find a way to use those processes outside of the project. That's a solution that scales much better." - @adg https://github.com/golang/go/issues/17244#issue-179371715
Regarding my own proposal (#15406), the goal was to utilize the Go builders to test across multiple architectures. Making the tools accessible outside of the x/ packages (#17312) is a better solution than moving a package into x.
"It is actually a medium-term goal of mine to support third-party repositories" - @bradfitz https://groups.google.com/d/msg/golang-dev/SVrNHQU1oEM/b13BeZHVBwAJ
Putting something in the sub-repositories does not imply support. People are not more or less inclined to work on a package just because it's in a sub-repository." - @adg https://github.com/golang/go/issues/17244#issue-179371715
Case in point, the fsnotify
and winfsnotify
packages in https://github.com/golang/exp haven't been updated in over 2 years. I've abandoned them in favour of the fsnotify organization.
"I think it would be better to have a scalable mechanism for identifying and maintaining good packages, and I don't see why that should be, or even can be, associated with golang.org/x." - @ianlancetaylor https://github.com/golang/go/issues/17244#issuecomment-249923601
Godoc.org already provides a start. A search for websockets ranks gorilla/websocket higher than x/net/websocket. It is imported more and has more stars on GitHub.
Yet people may gravitate towards the x/ package due to it's "official" status, even if gorilla/websocket is faster and subjectively better:
This already happened with websocket, where the package in /x/net is not the best implementation, but people use it because it's there. - @adg https://github.com/golang/go/issues/17244#issuecomment-250603608
From my perspective, being able to work under an x allows me to reach out to the go approvers and this is what I care when I am designing ecosystem-wide core libraries for a niche topic. I don't think it is possible once the experimentation is not considered a part of the Go project. - @rakyll https://github.com/golang/go/issues/17244#issuecomment-250005746
I see no technical reason why Go team members and other skilled gophers with the _time_ and _interest_ in a USB package couldn't provide code reviews and feedback to a package located under /rakyll or a /gousb organization.
"I think Gerrit might not be critical given Github PRs are becoming better." - @rakyll https://github.com/golang/go/issues/17244#issuecomment-250260049
Agreed on that. From my perspective, GitHub has caught up with what advantages Gerrit once provided. https://groups.google.com/forum/#!msg/golang-dev/Tk1rSAdiz10/
"Shouldn't they be able to put their high quality code in a repo somewhere else, and have it be regarded just as highly as anything in /x? Code should be judged on its own merits, not by its location." - @adg https://github.com/golang/go/issues/17244#issuecomment-250009629
Absolutely.
Instead of proposing what should or shouldn't be in the subrepos, I'd personally like to see a series of proposals that remove any advantage of using the x/subrepos.
That includes making tools like the Go builders, Gerrit (for those who want it), and licensing (like CLAHub) available to Git repositories anywhere.
It also means improving discovery. A curated list still isn't scalable, but I've read several mentions of reviews and ratings in this thread. There are other metrics, like number of imports, GitHub stars, passing tests, test coverage, and linting (lint/vet/fmt). Whether as part of GoDoc.org or a separate endeavour, I think discovering the best packages can be solved in a scalable way the embraces the whole community.
There is no reason why the Go team should be responsible for vetting all the foundational libraries for Go. The Go community is filled with intelligent people with a wide range of experience. Resources like CodeReviewComments encourage more gophers to use good practices. What else can be done in the area of education?
Ultimately, I'd like to see less of a divide between how the Go team and the larger Go community operate, with everyone having access to the best tools.
Instead of placing demands on the Go team through the x/ subrepos, why don't we give the Go team space and as much help as we can? Allow them to be involved in and with the community wherever their interests lay.
I wrote this message to Andrew on Slack but after reading this issue I'm not sure if this is a better place for it or not so here it goes:
I think I have a middle ground for getting the: "follows guidelines" label for projects while not having the Go team / contributors mandatory involved in the process.
I'm thinking of adding a flag to projects that would show them in as such on godoc.org (and maybe have a badge for that to add to the readme).
The reviewers should be part of the community and it should work on a trusted model and only reviewers can add new reviewers.
For an issue to be flagged as an issue at least a few reviewers would need to agree on it and the reviewers could get some form of recognition (karma) for having the most accurate reviews, basically gamify this but not for the number of repos reviewed or for the owners of the repositories but for the reviewers themselves.
As for the original issue, what to do with x/ I think of x/ as an intermediate step between really a really good project and adding it to the stdlib. Let's say gorilla/websocket could make it one day in it as it's known to be better than the standard implementation for websockets. Or things like Go mobile. We already have x/net/http for the http2 support there, no? I'd like to still be able to have a: we'll break compatibility if needed that is less strict than Go's one. And those packages don't have to make it in stdlib for 1.x lifecycle, maybe Go 2.x will be good enough. There are few things which Go misses and for that x/ would be good. Maybe a similar tools/ will be added to move the supporting tools.
@dlsniper Along those lines, a few years ago @garyburd had the idea of including a special token in project READMEs along with the GoDoc.org badge. https://github.com/golang/gddo/issues/107#issuecomment-23953268 The gist is that if a project doesn't include the badge/token for GoDoc.org, it's just a hobby project, and not intended to be a supported library. That doesn't guarantee a high quality library, but having a way to opt-out of the index makes sense.
Forks of a project also would be hidden from GoDoc.org based on the same mechanism, though I think that's being solved in other ways these days.
It would probably be a good idea to start one or more new threads over at https://github.com/golang/gddo/issues or golang-dev?
So far I've created one new issue based on this discussion thread:
The gist is that if a project doesn't include the badge/token for GoDoc.org, it's just a hobby project, and not intended to be a supported library.
No.
In order to be brief and clear, my thoughts in a Q&A:
Q: What should go in golang.org/x ?
A: Fundamental packages which may end up in stdlib; bootstrap anything else outside the tree
Q: What to do with current golang.org/x?
A: Stop accepting non-fundamental packages; move unmaintained packages outside the tree and assign domain experts as maintainers
Q: How to fix the Go team bandwidth issue?
A: Keep stdblib small; remove packages like log/syslog in Go 2.0; to stay relevant, a language must evolve, which will be easier and faster with a smaller codebase
Q: How to make quality packages discoverable
A: Good code should live anywhere; extend godoc.org with package ranking to reflect code and documentation quality as proposed in golang/gddo#320 _(Proposal for Package Ranking)_
As a Go developer, i'd prefer the core team members put as much time as they need on the evolution of the language, stdlib and the go tools.
@cznic comments like just "no," are not constructive. If you disagree, provide a rationale. Thanks.
Q: How to make quality packages discoverable
A: Good code should live anywhere; extend godoc.org with package analysis to show code quality, API stability and maybe popularity
You mean something like joining godoc.org and http://goreportcard.com ? That would be nice.
API stability marker also would be nice (like last breaking change happen in commit ...).
@matrixik Yes, that's what I have in mind.
One thing I'd like to add is to take into account a package's documentation and examples; doc.go, example_test.go.
@nathany et. al. I've opened https://github.com/golang/gddo/issues/445 as per suggestion you had so that we keep this one clean. Looking forward for comments there. Thank you.
Q: What should go in golang.org/x ?
As the proposer of #16257 (and other subrepo requests in the past, some accepted, and some not), my criteria for if I propose a project be moved into the x/ namespace is generally "do I think this would be useful in the standard library eventually, eg. context
, or do I think it could be vendored in the standard library to support other packages, eg. that sasl proposal?)
If the answer to both of those questions is no, I probably would prefer to keep it to myself.
The only place I make a slight exception to this is when I consider security and crypto related packages. Eg. with the SASL proposal I feel that it's important to have a single, known-good, well-vetted implementation. Fair or not, having it under golang.org/x/ will make people assume it's the "recommended" solution, and the process (and intelligent developers that are a part of this community), would hopefuly ensure that nothing horrible slips through the cracks, so security packages get slightly different considerations for me.
Q: How to fix the Go team bandwidth issue?
I think the answer hear is to allow third parties and trusted domain experts to act as the maintainer of some packages in the subrepos. There's no reason the Go team has to manage every single package themselves. This doesn't mean all authors immediately get commit access or review access, but it might mean that eventually long-time contributors and others that have shown that they can be responsible and maintain the standards expected in the subrepos could take some of the review and merge burden off the core team.
I don't think it's in your enumeration: another reason for something to live under x/ is being a dependency for something else under x/.
For example, Brotli is a compression format. A Go "package brotli" might or might not meet the bar for x/ inclusion on its own merits, but e.g. if we wanted WOFF2 (Web Open Font Format 2) support somewhere under x/, it would depend on a Brotli decoder, so I'd expect a "package brotli" to also have to live somewhere under x/.
Data point: recently the dependencies of core on x/net, x/crypto, and x/text have been steadily increasing. There are now 9 vendored packages in core with more to come.
@nigeltao I added that to the list. FWIW, I think we can use internal/ to side-step that issue.
@adg I am curious how licensing may impact the use of internal/ in core or current x/ tools. For example, if fsnotify wasn't under the Google CLA, could guru or godoc or go build
still use fsnotify? Likewise with brotli or other core/low-level packages like USB.
Either way, (IMO) the CLA used should be orthogonal to the location of the code, e.g. grpc-go still has the Google CLA.
@nathany, yes, we can only use CLA-compliant code in the core. That's briefly addressed by the bullet at top:
To use the same consistent license (with CLA) that the project uses.
But it's not very explicit.
The fsnotify codebase originated from code contributed to Go, then moved to x/exp, and now maintained in a separate GitHub organization. At one point we had all contributors sign the Google CLA, but I haven't been good about enforcing it for patches since. 🙁
If a project like gomobile were moved outside of x/, I assume the CLA would still be required. Is there tooling to help enforce it? Does it require a Gerrit workflow or is it independent of Gerrit?
Contributions to GitHub's repositories have a CLA check, so it is something that can be done on GitHub, though I don't know the implementation details.
That would address the technical issue of enforcing the CLA -- independent of repository location.
The other issue I personally have is that the non-endorsement license and Google CLA feel awkward for fsnotify specifically. It isn't currently a Google-run project, but needs the CLA and license for a potential future use in core. Which ends up feeling like an endorsement. Heh.
I'm not sure if this applies to any other projects that may be moved out of the x/ subrepos? Projects that may no longer under the review of Go team members (that's kind've the point of all this), but are low-level enough that they still may be useful as internal/ packages in core.
Hey all, apologies for the ping, but has there been any movement on this at all? I can see that this proposal has been referenced from several others (including one of my own).
No movement yet. Updates will be posted here.
Similar to my previous point earlier on this thread, @mattetti says on https://github.com/golang/go/issues/18497#issuecomment-270202473, a central point to discuss ecosystem-wide APIs and libraries is a hard requirement for the success of anything beyond the core project.
I think regardless of what's our decision for the new policy regarding to the x repos, we need a migration/replacment plan for those who finds it productive to use Go mediums.
I'd like to resume this discussion since it seems to be critical for the evolution of the stdlib and the extension of the ecosystem. There are a lot of very valid points made in this thread and I believe everyone cares to keep the burden on core go developers as light as possible while also benefiting from a great ecosystem.
From what I read I saw two proposed ideas to address the expansion of "core" packages:
What's clear to me is that we need to scale and even though my proposal #18497 was to provide an official package for interoperating about (but not necessarily doing) X
to quote @adg, I honestly don't care too much where it's going to live as long as it's clearly discoverable and have a thorough review process. Doing that outside of the Go project umbrella is extremely difficile and I think that's the heart of the issue.
At this point I think we could have 2 non exclusive strategies:
The first one would look at what can we do to make godoc.org a more useful place to find high quality, non-std library packages, start on that work in an incremental manner.
The other would be to create official interest groups which would have for mission to support "subsystems". Their role would go from maintaining and organizing a list of existing libraries. Defining standards and advocating for them. Code reviewing submitted 3rd party libraries and implementing interop solutions or actual features. These groups might benefit from current tooling and occasional access to core team members but wouldn't be restricted by release cycles and core team vetting.
Off the top of my head, here are interest groups I can think of: media (audio/video), images, hardware, mobile, GUI, crypto, web services (similar to go-kit), dev tooling, machine intelligence... Having those groups defined, official and the process well documented should help us scale.
That would obviously require a clearer delimitation between the standard library and non-standard packages. Really high quality packages that became standard don't ever have to "graduate" to the standard library but they have to be looked after by more than 1 owner (company or developer) and I believe those groups should be under the official Go umbrella.
If this idea sounds good, I would suggest to start by a couple special interest groups with momentum such as media and let them figure out how they want to get organized. I would assume an official team, repo, toolset and mission would be required. Then exposure with guidance are probably going to be the most valuable things that the project can provide to those teams.
What do you think?
/cc @spf13
Is there a longer, more abstract, article or general guidance around what code or libraries belong in Go's standard library?
"Once you have experience with the API being good, then it might make sense to promote to a subrepo or eventually the standard library" - @rsc https://github.com/golang/go/issues/18497#issuecomment-270387898
One big issue I see with this approach of "build it elsewhere, then promote it" is the licensing and CLA. If all contributors need to sign the Google CLA for inclusion into the subrepos/std, that not only involves a lot of administrative work, it could block promotion if some past contributors decide against it or are unreachable. (I don't know the remedy to that -- not a lawyer)
If the current system of subrepos is replaced with special interest groups (SIG) and the packages they support and recommend, this idea of promotion would only be relevant for standard library.
Then perhaps the licensing/CLA could be more relaxed (whatever each SIG chooses), with no expectation of the licensing or location of the code changing, or any of the overhead required to "promote" a library.
"all of these are on hold for #17244, which in turn is essentially blocked on understanding the long-term plan for package management. I intend to focus on that for the next six months." - @rsc
Thanks for putting so much time into this. I'm really looking forward to kicking the tires on the new dependency management tool once the initial version is made publicly available.
I :heart: the Go standard library, especially net/http as compared to the myriad of http server and client options in other language communities I'm familiar with. Go makes it a lot easier to get started.
My long-term hope is that through a combination of processes (SIGs) and tooling, the Go community can reap many of the benefits of the "batteries included" (large std library) approach for a wide range of libraries developed by the community in a distributed fashion.
If it works extremely well, I could even imagine parts of the std moving to external SIG-supported libraries in Go 2.0 (i.e. image/*). An ambitious goal might be to make third-party package management so seamless and special interest groups so well organized that there no longer is a discernible advantage for a library to be in std vs. located elsewhere.
Summary: a search engine that finds and ranks Go projects by code quality is being called for.
Rust's bug tracking discoverability and ranking: https://github.com/rust-lang/rfcs/pull/1824
As noted above, this issue is basically on hold for package management to settle. I think a lot of the pressure on the x repos is caused by bad broader support for package management.
Taking off hold to see if we can make any progress on this as 1.13 rolls out, as prompted by a comment on #19700.
I'd like to find resolution on this topic, at least for a time. I see the current categories of content in the x repos being:
I think the effective policy these last few years has been:
In light of the effective policy, issues on hold for this issue should be rejected unless they meet that criteria. Secondly, existing repos such as x/exp and x/mobile should be considered to be moved outside or explicitly marked as grandfathered in as part of the policy.
The x/time/civil proposal does not meet these policies, I would expect it and the CL to be closed.
@kardianos, thanks! That looks pretty accurate.
Keep in mind that a major reason (perhaps the only one) for having x/exp not be on GitHub already is for the same Gerrit code review tool, same builders/trybots/etc. So if we moved it, we'd need to decide whether we're just changing its import path (e.g. golang.org/x/exp/utf8string
-> goexperiment.net/utf8string
) or also moving it from the https://go-review.googlesource.com Gerrit instance to the misc https://code-review.googlesource.com Gerrit instance. But it'd need to remain on Gerrit w/ builders, because it's where many of the Go team are most comfortable.
As for x/mobile, it was originally meant to be official, and for some time had official staffing. It wasn't until some reprioritizations happened that the Go team stopped working on x/mobile. It might do more harm than good to move it at this point.
There is a great need for standard libraries, but they do not need to be done entirely by the Go team. If you increase the size of the Go Team, you also increase internal communication and decrease productivity. I am very much in favor of the divide and conquer approach. You do not need more people, but you do need more teams, SIG they are following standards and are producing reliable code that everyone can use. BindData was a very useful package, so I vendored it and wrappered it, one day it was gone. Not a problem for me, but an outcry from the community. I love using other peoples packages, but for my clients, I only do so after vendoring and code review unless the package is extremely popular and the maintainers well respected. I would respectfully suggest that when someone has a mature package of what they consider high quality, that they be able to submit it to a review process. I have some very specific ideas of how to conduct the review process, track the reliability of the coders and the code reviewers. For me, selecting packages to use is a painful process, that should not be the case.
Most helpful comment
@quentinmit I think we absolutely do need a way to tell people "these are good packages" and I think that is what @adg was alluding to with his point 4 above. The question is what that mechanism should be.
The disadvantage I see with the current golang.org/x system is that these packages are effectively owned by the core Go developers. That isn't scalable or even desirable. If we can solve that problem within the golang.org/x name space, then, fine. But how? And who controls the golang.org/x name space?
I think it would be better to have a scalable mechanism for identifying and maintaining good packages, and I don't see why that should be, or even can be, associated with golang.org/x.