Standard location for holding software source files

Whenever you ask yourself something like this, check out the Filesystem Hierarchy Standard (FHS).There, you will find the following entry:

usr/src : Source code (optional)

Purpose

Source code may be placed in this subdirectory, only for reference purposes

So you can put your source files in subdirectories of /usr/src. That said, this is an optional directory so you can really keep them wherever you like. Source code is not relevant after you've compiled it into an executable so the system will never require the source of something to be accessible at a specific location.

In conclusion: /usr/src is a pretty standard location but feel free to choose your own if you prefer.


/usr/local/src is a safe place to keep source code, and build it too. The FHS says:

Directory   Description  
src         Local source code

and also

The /usr/local hierarchy is for use by the system administrator when installing software locally. It needs to be safe from being overwritten when the system software is updated.

It's not clear what "Local source code" means, but it's clear the system isn't going to try to place anything in /usr/local/src, unlike /usr/src, so there seems to be little downside to putting code there.

In fact, I have mine on a separate filesystem:

Filesystem                    Size  Used Avail Use% Mounted on
/dev/mapper/data-local_src     79G   46G   30G  61% /usr/local/src

Note: at least on Debian, your user needs to be added to the staff group in order to write to /usr/local.


If by "standard" you mean conventional, then the place to unpack and build source code is your home directory. Such files are expected to be transient, deleted when you are done, or kept if you like, organised however you please. Your home directory is your area to play with all this kind of stuff.

If you do wish to keep them afterwards, for reference, the "Filesystem Hierarchy Standard" recommends /usr/src. However, this is a guide not a law; and, if you were to get into this habit then venture onto a non-Linux system, you are liable to cause trouble by following it. For example, on a BSD system, base system sources are kept there and you really don't want to be messing with those. Even on Linux you may run the risk of mingling with any source stored by package managers, which is not desirable.

I would recommend avoiding /usr/src overall. There's no obvious benefit to keeping anything there at all, and potential risk if you confuse its intended meaning.