Re:Revisiting How We Put Together Linux Systems
by FrozenCow on Monday September 01, 2014 @12:35PM
(#8253655)
> Of course there are exceptions {...} put it in a tarball in /opt, make some symlinks to /usr/local
This becomes unmanageable once you need to do that for multiple applications. Different applications need different versions. I'm not that familiar with Ruby, but you can imagine different versions of Ruby itself needing different versions of system libraries. An upgrade of your OS could become incompatible with the Ruby version you just compiled yourself.
It's good that some people are looking for solutions to this problem. It's a worthwhile effort, even though it might not be directly applicable to everyone. Same was true for Systemd a number of years ago.
Re:Revisiting How We Put Together Linux Systems
by otterley on Monday September 01, 2014 @01:19PM
(#8253849)
In practice it hasn't really been much of a manageability problem at any of the (reasonably large) companies whose servers I've maintained. There are perhaps five or six mission-critical packages that need to be kept up, and since we only support two target distributions, the order of complexity is quite small.
The key is to define your constraints clearly and not to deviate from them unless you have to.
I've been working with Linux systems for over 20 years now. Despite the grumblings of wet-behind-the-ears programmers to the contrary, having the newest version of package Foo is almost never necessary and one can generally get things done on a 1, 2, even 5 year old version of some operating environment. In fact, I'd argue that allowing time for software to mature is a Good Thing -- in the meantime, bugs get fixed, regressions in libraries are reverted, semantic versioning violations are repaired, etc, which reduces the amount of needless headache you have to deal with when you just want to Get Work Done.
Of course there are exceptions (I would never ask anyone to write server code under Ruby MRI pre-2.1), but those conditions are readily dealt with: you compile what you need (perhaps statically), put it in a tarball in /opt, make some symlinks to /usr/local (or update your PATH and other environment variables) and move on to the next actual problem.
Yes, standards and "old packages" can be annoying if you're used to a greater level of control on your personal equipment. But fences and constraints can be good: they keep your eye on the problem you're trying to solve; they keep the goalposts from moving; they minimize combinatorial compatibility problems; and they allow people to leverage their zones of expertise at the appropriate layers.