Currently the Linux Labs run a customized and reproducible form of Archlinux. This allows us to provide, in general, the latest stable versions of software and libraries. This allows students to take advantage of the latest features of some rapidly evolving technologies and software include Rust, Go, Python, etc. Most of the time updates to software and libraries provide complete or nearly complete backwards compatability. However, a small portion of users and assignments may be effected. If you suspect a software and/or library update has intruduced an some incompatability with your software or code, feel free to open a Mines Help Desk ticket and we'll be happy to assist you. Additonally, below are some software development recomendations, ideas, and scenarios that may be of interest.
Checking Package/Library Version
Using the package manager 'pacman' tool can be used to see the version of any package installed on the system. It may be helpful to SSH into a particuler lab machine to check this ahead of time.
pacman -Si packagename
If you don't know the exact package name, you can search for available and installed packages respectively:
pacman -Ss available_package_name
pacman -Qs installed_package_name
Virtual Environments
Many interprented langquages allow for dependencies/libraries to be handled independend of the system versions. These include python virtualenv, and Ruby RVM. Additonally, some languages such as rust can be installed directly in the users home folder allowing management of versions (Adjusting your PATH varible may be necessary). If you find that the tool for manageing these type of environments is missing, please create software request and make sure to mention the room or explicitly state it's for the Linux labs.
Portable Executables
For C & C++ projects, if you need to provide an executable or demo your application on a machine other than where you developed it, you may want to consider compiling a staticly linked executable to make it completely portable between Linux distros. This can be done, for example, using GCC's '-static' option. Not all C & C++ libraries provide static versions so the decision to build dynamically or statically must be evaluated on a project by project basis.
Online resources
For keeping up to date on new library versions and changes to their ABI, the ABI Laboratory's reports for C, C++, & Java libraries can be very helpful.
ABI Laboratory Reports