This is a guide for developers who want to work on the free software project, GNU FM, which powers Libre.fm. It will give you a run down of the specifics behind Libre.fm and GNU FM, tell you how to get started and give you some ideas of things we need to improve the software for everyone.
GNU FM has two primary elements: the server, and the frontend. The server, GNUkebox (GNU Jukebox) is written in PHP and listens for media applications to report the listening habits of the user. These are submitted as simple HTTP POSTs to the server, which resides at turtle.libre.fm — this replaces post.audioscrobbler.com
For this, the user needs an account. Currently, the only way to get an account is to register in the frontend component, but as the two components should be independent services, this is missing functionality.
Speaking of the frontend, Nixtape (a pun on Mixtape, and Unix… forget it!) is also written in PHP, providing a reasonably attractive user interface to the user, allowing her to navigate among artists, albums, users and groups, and eventually tags and events.
We use git for our version control system. You may need to install this before you can check out the code:
git clone https://git.gnu.io/gnu/gnu-fm.git
This will give you the latest code checkout, too. If you don’t have git, you can download a copy now.
git clone https://git.gnu.io/foocorp/librefm.git
This will give you all the Libre.fm specific stuff, like templates, logos, etc.
For installation instructions, see gnufm_install.txt in the checked-out code (it may have differences from the one linked here).
The GNU FM project welcomes new contributors. To get started, grab the code (see above) and join the Libre FM mailing list.
The FSF holds the copyright to GNU FM so they can defend everyone's freedom to use it. This means that if you are making a contribution of code to GNU FM larger than a simple bug fix you'll need to sign copyright assignment papers with the FSF.
To submit code to the project, please make sure that you've matched
the existing coding style and tested the code in a clean install,
branch of the Git project and
a merge request against the