I apologize for somewhat clickbait-y title but the question nevertheless is worth asking.
Let me set the stage first.
For a long time python didn’t have a default dependency management tool. And then got one but it is still wasn’t good enough. This led to the present day when there are 100500 different package/project management tools in the python ecosystem (pip, pipfile, poetry, uv - just to name a few) - and all of them are competing, fragmenting the ecosystem and making regular developer’s life harder.
Very similar situation is observed in C and C++ word. Build tools aside - there are no standard dependency management tools. There is OS package manger, then there is Conan, VCPKG, Meson’s wrap then there are makeshift solutions which exploit build tool’s ability to fetch remote URL (git or http) to fetch something from the internet at build time. None of this helps developers, who have to deal with these tools. It is a known fact that build+ dependency management tool is a unique snowflake in every C or C++ project and switching from one project to another is not an easy task fro a regular Joe.
Both python and C, C++ languages are living examples of xkcd: Standards
Golang didn’t have a package manager in the early days which led to an explosion of 3rd party tools. Luckily golang’s leadership recognized the problem until it was too late and now Go has decent standard go.mod solution and previously fragmented ecosystem united and now every Go project uses the standard tool.
Now the question part:
In numerous interviews and podcasts @gingerBill said that he considers package managers harmful for various reasons (one of the main ones is that they make it too easy to create deep and unmanageable dependency chains, which leads to poor code quality, bloat etc). While I agree with his views I also can’t ignore the fact that absence of a standard tool will lead to ecosystem fragmentation. Today Odin is small enough to be immune to this problem, but it is only a matter of time.
- How is Odin planning to address this situation (if it plans at all)?
- Is there a way to avoid the fragmentation via 3rd party tooling in some other way (without providing a default tool?) - perhaps be more aggressive with
vendor
collection? - Somehow most of the golang ecosystem still strives for simplicity and minimal dependencies (don’t get me wrong, there are many exceptions) so this makes me think that there is a strong cultural aspect to this. And a default dependency management tool only gives a way out for those who desperately need it without fragmenting the ecosystem. This is only a side of the coin that I see. I wonder what perspective I might be missing…