1.1. Concepts

1.1.1. Packages

So you developed your nice program and want to give it to others. Obviously, you won't distribute each file of the program separately, but rather put these files together to get a single file to distribute. This file is called a package and is, in principle, a normal file: you can move it, copy it, upload it, download it, delete it, whatever. It is much easier to deal with this single file than with all the files it contains.

Now imagine you're going to create a GNU/Linux distribution (and since you're reading this manual, you most likely want to) and intend to provide as many useful programs as possible. The first thing you have to do is to decide which package format to use. Obviously, you will need to develop or adapt a set of programs that can (more or less) automatically manage these packages, so all your packages will need to have the same format. Whether or not your packages include the information necessary for the installer to know how and where to install the files of the package depends on the package format you choose. I'll give examples for both kinds of package formats in Section 1.2.

Next, you should decide whether you want to create a traditional binary-based distribution (with packages containing only the pre-compiled, directly executable programs, like most GNU/Linux distributions do it nowadays)[1], or one that bases completely on source code (with packages containing the original source codes and all the patches necessary to make them compile on your distribution). Remember that, in the second case, all packages have to be compiled before they can be used. While you have, in the first case, an installation time of, perhaps, half an hour, the source-code-based installation can take anything from a few hours up to a few days, also depending on the user's ... . The advantage of the second approach is absolute flexibility, because many programs have settings that can only be set at compilation time.

1.1.2. Package databases

Supposing that you created your distribution with all the concepts discussed so far, you will very soon encounter a first problem: how are you going to uninstall packages?

1.1.3. Dependencies

Bla.



[1] Be careful to also distribute the source code to the packages that have a license similar to the GNU GPL, because the GNU GPL prohibits distribution of binaries alone. But to be consistent across all packages, you better distribute the source code for all packages that provide it anyway.