How we measure
While some of our software criteria are subjective - like “easy to use” - or very clear - like “free software” - the criteria, that software should be simple and lightweight are something which can be measured.
There are several values which can be used to determine the “lightweightness” and complexity of a program.
- Size of the source code
- Size of the compiled binary
- Lines of Code
- the programming language which was used
- Memory usage
We think, the first three values are giving only limited indications on how lightweight a program is.
The programming language is a strong indicator - a program which was programmed in a language that translate directly to machine code, made by a compiler will be more efficient and lightweight as a program which was programmed in a language which bust be run by an interpreter or bytecode interpreter.
An even stronger indicator is memory usage. So we will measure the memory usage of a program to give clear recommendations. we do this by using the program smem.
Measuring with smem
When it comes to memory measurement there are different terms with different meanings. Most standard Unix tools are reporting the “resident set size” (RSS) - which roughly is the memory usage of a program plus the shared libraries it needs. Because it includes the whole shared memory it shares with other programs this isn't a fair representation of memory a program really needs.
The “unique set size” (USS) on the other hand underestimates the programs memory footprint, because it reports only the memory needed by the program binary only, without any shared library it might need.
The “proportional set size” (PSS) smem reports is the memory the program plus the '“fair share” of each shared area to give a realistic measure.' That means, of course, the program's PSS will shrink the more programs with the same shared libraries will run.
We will measure all programs under the same condition (a machine with 2 GB RAM), by running as few as background processes as possible and only those which are needed for the program - obviously we have to run X11 to measure the memory usage for a graphical program which runs under X11 (using a resolution of 1024×768). As it is default on Linux, the unit used is kilobyte (kB)