Our goals are:
- To give you the strongest and most stable possible foundation upon which to build your site.
- To minimize the amount of work you have to do to keep your site's infrastructure up-to-date and secure.
- To do both while giving you as much flexibility as possible to build what you want.
To meet those goals, we divide software into four broad categories, two that we're responsible for and two that you're responsible for:
- We're responsible for: The operating system, system tools & utilities, programming languages, and their core libraries.
- We're responsible for: third-party libraries and modules that are particularly common, popular, or that require regular updates.
- You're responsible for: third-party libraries and modules we don't provide that your site needs to work properly.
- You're responsible for: your site's application code and data.
#1 and #4 are clear enough, but the demarcation line between #2 and #3 is always a tricky balancing act. The lower-level a module, or the more security implications it has, the more likely it becomes that we should provide it. If a module requires customization, imposes restrictions, or often has backward compatibility issues, you should provide it.
This entry discusses how you can install third-party libraries modules yourself for the most common languages and how to request that we install things when appropriate.
- Node.js
We provide the node binary and the npm and yarn package managers. You can use these to install needed dependencies to the current directory. (E.g., npm -g will not work.)
- Perl
You can use local::lib to set up a per-site repository that will work with CPAN to allow you to obtain and use exactly the modules you want. We do centrally install modules from the CPAN archive with appropriate justification. In this case, there is an additional requirement that the module's built-in tests pass in our environment.
- PHP
We provide PHP binaries and core extensions (both built-in and from PECL). We add extensions only if they are of great general interest. We recommend the use of Composer or a similar tool to set up and manage your application's PHP environment. This will ensure that the modules (and versions of those modules) that your application expects are present and that they don't change out from under you as we continuously update our system. You may also build and use extensions we do not provide.
- Python
We strongly recommend using virtualenv or a similar tool to set up and manage your application's python environment. (Note that Conda does not work well on FreeBSD.) However, unlike other languages, Python's performance degrades as more modules are added to its central library; you will usually get better performance and a more stable site if you use a virtual environment with exactly (and only) the modules you need, rather than diving into the deep pool of modules provided by our system. Consequently, we can centrally install PIP modules if (and only if) they are of great general interest or are especially difficult to build properly. (Numpy, we're looking at you.)
- Ruby
We provide Ruby binaries and the gem package manager. We tend not to provide many centrally-installed gems. We recommend setting the $GEM_HOME environment to a path of your own (e.g., /home/protected/gems) and using gem or bundler or a similar tool to set up exactly (and only) the modules you need. This will ensure that the modules (and versions of those modules) that your application expects are present and that they don't change out from under you as we continuously update our system.
- Others...
For other languages or general-purpose utilities, we rely on the FreeBSD ports collection, which contains 27,000+ software packages. If a package is of sufficient general interest (and not in one of the prohibited categories below), we are generally able to provide it.
- games
- client applications (like email or IRC clients)
- GUI applications
- applications (like content management systems) that require extensive per-site customization
- software that requires a commercial license to use
- Apache modules
- customized packages or nonstandard configurations
- packages with specialized installation or configuration requirements
If you have questions about how to perform per-site module installation for one of these languages, please review the support tab for your support options.
To request that we centrally install a new software package, please submit an Assistance Request. (Make sure to follow the instructions on that page.)
When we install software, we require that the requested software package have some applicability to web hosting and that central installation of the software will not interfere with others' use of the service. For example, we cannot install the following categories of software: