Computer programmers create computer programs, and somehow people get it and use it. This can be a complicated, thorny process, sometimes, and it can involve many people.
I identify at least the following roles and responsibilities in this process. Note that that one person may have several roles or responsibilities. In the simplest extreme, one person makes software for themselves; in the other extreme, a gigantic enterprise produces software used by as many as billions of people. Further, each role can be served by several people, at the same time or over time. For simplicity, I'll talk in singular.
- The software developer makes the software in the first place, and adds new features over time.
- The maintainer keeps the software working after the developer has made it. They tend to help users, and fix problems.
- The packager makes an installation package of the software, as a standalone package. They update the package when there are new version of the software. A package here might be a DEB or RPM package, or a Docker image, or a Flatpak, or some other format. It might even be a source archive that needs to be compiled during installation. For the purposes of this post, the format doesn't matter.
- The distribution packager makes and maintains a package that's part of a complete operating system, such as a Linux distribution, or some other collection of various software from diverse sources, such as Brew for Macs.
- The system administrator (also known as an operations or IT person) installs and configures the operating system and other software on computers for users, possibly using installation packages of some kind. They also make sure new versions are installed.
- The end user uses the software.
There are probably other roles, but this is a start. Identifying the roles is useful for thinking about and discussing what aspects of this should be done by what people.
Different people have different needs and wants. For example, for some developers and maintainers it's of great importance that they are in close contact with their end users, and they find having to involve third parties at all is a source of friction and frustration. A symptom of this is when people claim the traditional Linux distribution is obsolete. The close connection makes it easier to provide what end users need and want, and anything that gets in the way should be removed.
Other people (in whatever roles) see value in involving people whose experience and expertise if broader than individual programs. This might result in a more pro-active approach to administration, upgrades, and security. But for others, the deep domain knowledge of one program is what they're after.
There are people are good at many or all aspects of the software supply process. But not everyone has to be an expert on everything. There is no single configuration of roles that works for all people and all software all the time for ever.
It's complicated.
This is one reason why so many people spend so much time and effort vigorously promoting some specific way of doing things, or arguing against that way of doing things.