Source code standards

These are a few of the technical and aesthetic standards that I have for my open-source computer programming.

Release format

Releases are made only when needed, in both XZ and gzip tarballs (tar files compressed with XZ and gzip). The file names begin with the name of the package, an underscore and the version number. An underscore is used because it more clearly separates the two elements.

The version consists of major, minor and patch numbers, separated by periods. The patch number can be omitted if it is zero. The initial release should be 0.1. Versions prior to that begin with 0.0.1, and are all release 0. Versions that begin with “0.” are betas, whereas those that begin with “0.0.” are alphas, and ideally should only be used for internal testing, prior to the first release.

Each source code archive file must be signed, with a detached, ascii armored signature (.asc file). If an RSA key is used, it must be at least 4096 bits.


I prefer the international standard of year-month-day, and try to avoid the US inconsistency of month-day-year whenever possible. I prefer Unix date for simplicity, when recording it somewhere (like Linux/Unix filesystems).

I use the term date to mean both date and time, because a date is a measure of time relative to a standard reference point, whereas a time is measured between two arbitrary points. It’s the difference between a calendar/clock and a timer. The same applies to datestamp instead of timestamp.

I sometimes use a date format called earth date, which is based entirely on astronomy and basic physics, not culture. It consists of the year, day and the second (with decimal places). In this format the start of 2019 is 2019-000-00000, while the end is 2019-364-86399.

I don’t see why the period of a day is so special, and so usually record dates to the second, or millisecond when automated. This also means dates can be converted between timezones without the day number becoming inaccurate.

Log file format

Log files are text, with each line starting with a Unix datestamp (in the UTC timezone), with a variable number of decimal places. This is followed by a colon, a space, and then the log entry, to the end of the line. When a daemon starts, it adds a blank line, followed by it’s name, version number, release number and hostname.

For example: 1548466496.789: startd, version 0.1 (release 1), on