| ▲ | jchw 2 hours ago | |
People keep replying seeming to miss what makes Go's solution so good. I think it deserves more attention. In many cases I think it's impossible to avoid the pain that comes with decentralization without defeating the point. It's challenging because certain things are hard to do decentralized so it's easier to just give up and rely on central authorities and components. When you install Go, it does just that, to some approximation; it will try to fetch from the module proxy first and fall back after that fails. But what makes Go different and more interesting is that you can just turn that off with no consequence. As long as all of the Git hosts are up, you can still use Go just fine with no proxy. I'm pretty sure Nix builds do this by default with Go so I believe most dependencies are usually online. That means the proxy approach and the decentralized approach are both fully redundant with eachother, while allowing the decentralized VCS hosts to remain the source of truth. Go also separately has the sumdb to enforce immutability, so you can know that when you go grab a specific package that the tag name corresponds to one and only one exact source code. This is also optional, and even without it you get the benefit of local sum checking via your own cache and go.sum files in source checkouts. But having this be separate is great because it also means you could use another third party module proxy or a third party sumdb, or use just the sumdb and no proxy. It gives you many options to not have to rely on a single party while still getting some of the benefits of centralization. Systems like this are rare. Many systems try very hard to have the cake and eat it too, but it usually fails somewhere. For me Go's approach works, and that is worth some attention. | ||
| ▲ | throwaway27448 13 minutes ago | parent | next [-] | |
All package managers I've used allow specifying where the package is pulled from. What am I missing? What ecosystems are you comparing go to? | ||
| ▲ | zer00eyz 8 minutes ago | parent | prev [-] | |
> When you install Go, it does just that, to some approximation; it will try to fetch from the module proxy first and fall back after that fails. Go is telling you that your VCS has a deficiency, without saying it out loud. That proxy should be your own repo... but git sub modules, sub trees, sub directories are non starters for 99 percent of cases... Git is an amazing tool, and if you want to manage your development like the linux kernel its dam near perfect. Most orgs dont work that way, and the tools and machinations that we have built around these shortcomings are rather burdensome. I long for google to productize piper for the rest of us. | ||