Hacker News new | ask | show | jobs
by FooBarWidget 5201 days ago
And yet look at how many people use RVM. Just from user popularity alone it's clear that system package managers, no matter how much they're praised by sysadmin people, are not adequate. There's a clear need for package management that's:

1. cross-platform.

2. allows users access to the latest version of the software immediately.

3. allows installation of multiple versions. API/ABI stability is great but perfect backward compatibility is never possible. E.g. some apps actually rely on bugs in the platform and if you fix them they break; yeah yeah I know the software must be fixed but there may be a ton of reasons why that doesn't happen or at least not happen immediately and there's a clear need among users to be able to install multiple versions of a platform/library.

RPM/DEB theoretically support (2), but in practice distros never do that. Third party packagers that immediately provide the latest versions are most exception to the rule because they need to replicate their effort multiple times over multiple platforms thanks to the lack of support for (1). RPM/DEB don't even try to support (3).

1 comments

Maven.

* Cross-platform.

* Easy access to remote packages as soon as they're posted.

* Versions must specified, so builds are very repeatable. You bear the responsibility of updating your dependencies, but you don't get surprised if a version decides to break compatibility, either.

Also, very decentralized, and it's easy to create a directory locally to hold the dependencies within a project (specify a file:// repository relative to ${project.dir}), or on a per-system-user level (mvn install), or on a per-company/organizational unit basis (self-hosted repos are a cinch).

It's actually a fantastic package management system tailored to Java that works extremely well. Its main problem is that it's also fantastically verbose, and including more and more build plugins can grow exponentially more arcane the greater the number of plugins involved. However, with Go's standardized directory layout among other things (I admit, I haven't done much research into trying Go out), something akin to Maven may actually be a good fit.

As a user, i've been occasionally fristrated with the decentralized nature of Maven. The isn't any single repository which would contain all packages (especially rc/beta versions). And in my experience repos and which repos are used to distributed a package tend to change fairly often. More often than not, I have to hunt for new repos when building from scratch.

Maven is also very slow when your project has ~10 repos and you need to download multiple dependencies. Having your own repo might be a necessity.

You can set up Artifactory on a nearby server you own and proxy all of your package requests through it. Works quite well.
Maven is adequate as a dependency resolution tool, though I always marvel at the insane number of packages it downloads.

That said it should not ever be used as a build system -- ant exist for exactly that reason or you could use Make if you want your builds to go faster.

They take opposite approaches. Maven gives you scaffolding; it's up to you to customize it. Ant gives you practically nothing, but you can do whatever you want. If you want to code on the shoulders of giants then Maven will help you much more than Ant will, IMO.