Welcome to the world. You are a beta tester. No, you do not get an employee discount. Thanks, keep moving. How dare you not run the latest version of my software.
Gold Masters
We used to have to have real discipline with shipping software. We didn’t ship docker containers, we shipped real containers! If you missed a date, it wouldn’t hit Toys-R-Us by Christmas. You missed the wave.
The Mediums Available Now
- HARD COPY OLDEST TO NEWEST: FLOPPY, DVD, USB STICK
- APP STORES
- Web Apps
- Website Download: Native Software (.exe,.app, .msi)
- jithub dot com
- tar.gz (zip files)
- Dockerfile
As a developer we are already on the hub so we go there. But for mere mortals, App Stores have taken the cake. I will not talk about Docker in this post. As a consumer I prefer web downloads native to my platform or web apps.
App Stores
The walled garden is appealing. It provides you a platform and some level of competence or use to. They are gated by the who own the store. But this is reversing in trend I think***
The assumed blessing gets you eyeballs and is the only way to exist and use the hardware to its full potential on most platforms. You think the billions of iPhones in the world belong to us? They belong to Apple. We are leasing them!!!
The Trap
Apple, Google, etc now control when your users get your update. It is a friction source between you and your customer. They can just flat out refuse. Imagine trying to contact IT for a company will millions of customers. I think this problem is just now being identified. This type of relationship has never existed outside of government census style forced participation.
But it is still the ONLY WAY for some things.
If you would like to save actual data for sure on someones phone. Create a native app. Web apps will lose data cause Safari is a brutal target.
APT
Advanced Package Tool is how we manage our software on Debian based Linux systems (ubuntu). It is quite good and Homebrew on Mac is a poor imitation**
I'll provide you with information about the invention of the APT package system and its initial deployment. However, I want to note that I don't have access to a live database or search function, so I may not be able to provide completely accurate citations. I'll give you the information to the best of my knowledge, but I recommend double-checking these details for full accuracy.
The APT (Advanced Package Tool) package management system was primarily developed by the Debian project. It was first introduced in Debian GNU/Linux.
The primary developers of APT were:
1. Jason Gunthorpe
2. Brian White
3. Ian Jackson
APT was first released in 1998 as part of Debian 2.1 (codenamed "Slink").
While I can't provide specific citations due to the limitations mentioned earlier, you can find more detailed information about APT's history and development in the following sources:
1. The Debian Project's official documentation and release notes for Debian 2.1.
2. Historical mailing list archives of the Debian project from the late 1990s.
3. The APT project's own documentation and changelog.
For the most accurate and up-to-date information, I recommend checking these sources directly or consulting more recent literature on the history of Linux package management systems.
-CLAUDE VAN DAMME
Sometimes the links get broken and it can’t even find a python3.11-venv 😀

I started with Red Hat Linux 5 in 1996 and I think I can say with a lot of confidence. APT is what made Debian and then Ubuntu into a player in the Linux distribution game. APT can be your own app store because you can add repositories to it. If you are ever having a problem finding a package in apt. make sure you do this a few times:
sudo apt upgrade && sudo apt update
Building from Source Aside
::Arch, Gentoo has entered teh chat::
So one of the rights of passage in old linux days was recompiling your kernel. It used to be necessary before they added json parsing for device trees and configurations. Let’s just say you’d make a small change…
Well, first download the source of the kernel. Hopefully it came with your distro. make, make install… a few sudos. I wouldn’t be surprised if it was still about the same process. Seems like a pain though. Hours to compile on a 386sx with no floating point coprocessor or whatever. Cycles were sparse and bits where short.
Why?
for fun, for curiosity, for hopefully profit because YOU can do something no one else can unless they make your modifications.
CPU Platforms
Shipping fat binaries is annoying sometimes so that is why if you are bespoke hardware you build from source. You can still build vim for the Amiga!
- x86
- AMD64
- ARM64
- POWERPC*
Building from source is often triggered by moving to a new platform or wanting to use cutting edge compiler technologies.
Web Downloads & Native Software
This is my preferred method of distribution.
This is the only way to truly control your destiny. Ideally you have a web-version of the application and then a downloadable offline version. Going native is always the best solution for platform integration. But if you have multi-platform dreams you again put another vendor between you and your customer.
I’m looking at you Xamarin, Flutter, Qt, React Native
Continuous Improvement (BUILD, TEST, DEPLOY)
Servers have always been the method in which we prepare our software for distribution. Producing reproducible build artifacts based on time and version is critical when tracking down hard to find bugs that get introduced to the system.
To me the largest benefit of running a “build server” is that every commit to master or main will get built. And if it doesn’t compile on the server. The developer forgot to commit something!!!
It is a great test of “it works on my machine, does it work on yours?”
Testing
- Optically (not automated but ideally a 4 eye check)
- Unit
- Integration
- Performance
Release Strategies
I just want to talk about versions here. Releasing software is complicated. Who is this update for? Is it a test that you can’t test yourself so you need custom release for 1-2 people only?
ALPHA
- Developer only and maybe a short loop customer that needs to test something.
- This should not be used in production of possible…
BETA
- Ready enough for general use for testing before a “release”
- Easily generated through Jenkins or some CI/CD server
Date Based Versioning
Preferred method.
- 2024.08.30.BETA
- 2024.07.20.ALPHA
- 2024.04.19
- 2023.12.31.BETA
Semantic Versioning (SemVer)
I would be remiss not to mention this. But yes there is this scheme out there that hopes to encode version numbers in W.X.Y.Z format where these letters mean something. I don’t care to go into this, you are pushing the problem to someone who can make mistakes and SemVer’s LIE ALL THE TIME.
Pokemon Versioning
- With a solid BETA version you tag it with a cute name
- 2 words normally chosen from a 2 bags
- Fitting a theme
Look at ROS, Ubuntu, etc
Examples:
- Humble Hawksbill
- Icecream Sandwich
- Stroppy Titan
Stuck in Beta
You can call the version whatever you want. Users know when it is beta, you can feel it.
With your Jenkins about to build, test, and deploy your software with a single click. You get stuck in this release every-week.
You can do this. But unless you are web app where the software updates automagically. Don’t do this. Users do not like their sofware to change too often.
Try to release a beta once a quarter. And do a solid release 2 times a year if possible. Write up a nice changelog and provide a reason for your users to update. Don’t force them!
Give your customer a choice which version of the software to run!


