Josselin Mouette: RubyGem is from Mars, apt-get is from Earth
There is again some ongoing debate about Ruy gems and how to integrate them cleanly into the operating system.
Let s put aside the fact such tools are useful on Windows and MacOS which don t have decent packaging systems. This is not a reason to dictate stupid requirements for other operating systems. Still, even without that, gems, eggs and the like are great tools for development; tools that developers can t work without today. They allow to easily setup a development environment with everything needed, at the latest versions. However they were not meant for integration and production environments, and will never be suitable for them. We re living in another world indeed: a world where servers must be up 24/7, where security issues flood your inbox every day, where you need dozens of servers running the very same software. This world is the Earth.
Python eggs and Ruby gems were designed for the same target audience and with similar requirements; as such, they share the same deficiencies when it comes to other audiences:
- They replace the operating system s packaging tool. This is very nice to not wait for the packagers when you want the latest development version, but you lose track of what is actually installed. In production, you need to know exactly what s installed and at what version. You also need to know what you will need to update in case of a security issue.
- They install packages automatically on the system. This is really the biggest WTF; there are some reasons to do that to begin with, but they are all wrong.
- They use a specific file format. This requirement comes mostly from the Windows world, and it really makes no sense on Unix. It makes it much harder to integrate complex applications using components in different languages.
- They ship all files at the same place, happily violating the FHS and making it even harder to integrate with other things.
- API versioning in /usr/include/package-X.Y
- ABI versioning of libraries
- Build/install-time requirements gathering using an extensible format with pkg-config
- Automated generation of config.h containing all system-specific macros (including paths), with autoconf
- The Mono Global assembly cache which solves some of the specific issues of interpreted languages