What is Free Software?
I've been a programmer for nearly my entire life. When I was a little kid, my first personal computers were built out of mail-order kits. They were crude little things without any form of data storage or networking -- maybe a buzzer and a 2-digit LED display. But you'd be able to make a simple sequence of instructions -- a program, and watch it run. It taught me to count in binary, and enter data in hexadecimal. A glorified calculator, I suppose. Back then, that's what computers *were*. But at least the user was in complete control of what the computer was doing.
My first "real code" was, believe it or not, done on HP-9000 mainframes -- with the program and data using PUNCHED CARDS. When you'd compile your program into an object, the output was another stack of punched cards that you'd store in a kind of "shoebox". If you dropped the box, you'd have these cards everywhere and have to manually put then back in order again. Nerd fact : that's where 80-column text mode consoles originate; to match the capacity of those cards. Companies used these things for basic stuff like payroll, storing orders and managing inventory.
I still remember those "green screen" consoles. Dumb terminals, connected to the Server in the other room. No mouse, just an 80x20 green text display and a nice chunky keyboard. And guess what; I'm still quite happy working that way.
Back then there was an "operator" who would run the code (the guy placing stacks of cards into the card hopper). The "analyst" would look at what the business needed to program, and the "programmer" would make the code. If you were really good at it, you'd be a "programmer/analyst", and get to design your own program as well as code it.
Guys walked around in brown suits, with pocket protectors and sometimes slide rules. Programmers used to use these huge flow-chart sheets with pencils and templates.
I first heard the term "agile" in the late 90s.
"Are you guys agile?"
"Sure we are. We're building all kinds of amazing stuff."
"But are you AGILE."
And of course the Agile Disciple has to drone on about what it means. And all these years later -- can anyone even agree on it? It's just like "object oriented programming". Nobody in their right mind would say it's not a good thing, right? But come on, show me exactly how this has made things better. Really, I'd like to know.
Well it turned out that yeah, we were "agile". We just didn't know it at the time. We did all the things back then that software companies do now, we just didn't call it by the same names.
The internet was in it's infancy. Netscape and NCSA Mosaic were the only real browsers around. There was no Facebook or Google. Windows didn't yet have an IP stack. I worked one of Toronto's first and best ISPs.
Once the web took off and became popular, there was need for the type of programmers that could just out "web properties". Web sites were viewed as "properties", and thus naturally they started calling us "developers".
(That's why I've never wanted to be a "developer".)
I noticed that all of a sudden, companies started putting project management systems in place. I'm talking actual PMs, not "scrum masters". Since the fun part of programming had been removed, they figured it was now possible to predict the progress of a development project in the same way you'd do so for a structural engineering project. Assemble the raw materials, put them all in the same place, do some work, and you get a predictable result. As if you're manufacturing a pair of shoes.
An engineer doesn't think that way, because engineering is about overcoming problems. In a way, that's what the software *business* is about -- solving people's problems. We're not making shoes, here. An engineer thinks like a scientist. Each solution to a problem is a "theory" until it is "proven". That's really all any program is.
My approach has always been the same, and it's just common sense. I've got the track record to prove I can ship quality products fast, without drinking the kool-aid.
Sometimes you get stuck on a task and have to wait, or work around it. Sometimes you cut corners in order to complete a project on time. Sometimes you discover new ways of doing things, that makes things work better.
It's a cumulative, dynamic process. Like a painter, or sculpter. If you're making something unique, then it's going to take some thought; and there are unknowns involved.
In those days if you wanted to build a "dynamic web site", you didn't have a whole lot of options for programming frameworks -- most of them were proprietary and cost a bunch of money; very few of them are still around today.
Now we have an absolutely ridiculous amount of complexity in terms of frameworks, methodologies, philosophies, religions. And hey, maybe that's great. I think it would be, if it wasn't all in the hands of a few huge corporations.
What bothers me is the erosion of the most important freedoms of all -- the freedom to write code. When people think "open source", they think "I don't have to pay for it". But that's not even the real issue.
Software piracy was fairly rampant until Microsoft created the SPA and started suing people. Lawsuits accompanied the development of many fine OSS products (perhaps all of them).
FREE software is about FREEDOM. For the user, that means the freedom to use his computer and software as he pleases. For the developer, that means being able to publish software that does whatever he pleases. That means, you want to understand what your computer software is doing, and be in control of that functionality.
Apple took BSD to make products that enslave the user. Google exploited Linux to do the same thing. Not only do they make piles of money from the efforts of open-source programmers who don't get paid, they want to control *your* choice to install and use the software you prefer.
That iPhone you just bought isn't really *yours*. They just allow you to use it -- as long as you do what they say, and keep delivering your personal data stream to them. They've TRIED to sue people just for "jailbreaking" their phones -- heck, Apple even sues people for getting hold of their repair manuals -- you are not even allowed to REPAIR that $4,000 iMac you bought.
We actually have far LESS choice in our computing platforms and operating systems than in the old days. Far less, in fact.
At one time I could pick UNIX workstations from about 50 different vendors. Many of those manufacturers were based in the US and Canada. Yes, we actually used to make computers here.
I remember working on teams where everyone would have a different type of computer. Not just two or three types, but a dozen. People could choose to use a different text editor, compiler, whatever. And yet somehow, we managed to get stuff done. I suppose there just hadn't been time to develop "religions" around certain programming languages or frameworks, because there were so many to choose from.
Much of the most important software in the world was written by "just one guy", and that's still true today to some extent. But it's kind of scary how these drones don't know any other way to build things, than what Facebook / Apple / Google tell them.
Now the "modern" programmer is either on a Macbook or Ubuntu. Not that there's anything wrong with that per se -- but the thing is, that's all ANYONE ever uses. These kids think that's all that is, and all that ever has been. If you come in even with a different VERSION of Ubuntu, say -- you'll find stuff starts to break.
"Oh yeah, that requires 1.6 now. Oh no, that only works in version 2, we're on 3 now."
Somehow decades ago we could ship software to just about any computer, anywhere, without asking permission from giant corporations. And the software would just keep on running. Back then maybe we just didn't know how long our code would run -- forever, maybe.
So now we basically have all of the world's computers -- and most of the world's programmers -- all under the control of a handful of powerful companies. The kind of companies that invade people's privacy on a daily basis. If you don't do what they say, you'll get banned, blocked or deleted and the computer you thought you owned becomes a paperweight.
Google (Go, Kubernetes, Android). Amazon (AWS). Apple (xcode and various other stuff). Facebook (REACT).
You're the programmer, but everything you do is controlled by these corporations. Users can run your code only if the Big Vendor approves -- "for user protection", of course.
Want to make apps for that iPhone? Well, you'd better buy their laptops too, and also fork over more cash for the *privilege* of being allowed to publish software on that platform.
These aren't the people who gave us the power to develop our own applications. These are the ones who listen to your phone calls, monitor what you do on the web, and demand your credit card number before you're allowed to install apps on the computer you bought.
They use DRM schemes, force you to submit your code for their approval, and encourage programmers to think only the way these huge corporations want you to think. When you buy products from them, you aren't free to use them in any way you please -- they invade your privacy *and* they restrict your freedom.
You have no idea what apps are doing in your device. Even Apple and Google can't control *everything*, and malware slips in to user devices all the time. Not only that, but they actively *block* users from getting access to useful apps that they actually want -- like tethering features, for example; or the ability to send SMS messages from a device programatically.
A user will install an app to say, transfer files to his phone. Nobody pays much attention when it asks permission to do pretty much anything on your device. They'll download all of your contacts, your photos, your files. They listen to your microphone, read your e-mail, log your browsing, and trace your physical whereabouts. Oh sure, they'll make it LOOK like the user has some type of choice. They make a big deal about "security" and "privacy" -- but it's not privacy and security for YOU, it's for THEM. So that guys like ME can't find out what their software is really doing.
Snap a photo on your phone, and guess what -- Google is checking it out to see if they want a copy. They might even ask to take your photo and use it for Google Maps -- because they know you've taken a photo that they want. The user never consented to this, it's just been buried in a 400-page user license agreement.
(Then later when the inevitable Data Breach comes, people wonder how a big pile of sensitive information got piled up in one place.)
I can't believe people drink this kool-aid. This is not what free software is about.
They sit down at a Macbook / Ubuntu box, and almost always install binary copies of hundreds of different libraries from repositories around the internet (which is dubious to begin with). They point and click in their IDEs. Instead of actually writing code, most of the time they're just going around the internet looking for other people's code to do it for them. Then they bundle it all up with "sticks and bubblegum" (as one consultant put it). After all, who cares -- they're not making real software, it's going to be obsolete in 6 months anyway, so why bother putting any real effort into it. They tend to think like a swarm of drones. Google or Apple or Facebook will declare some new API or policy change, and millions of these demi-programmers obediently jump on whatever bandwagon they're told to.
That's why they put so much focus on what tool to use, rather than how to use it. You can choose -- Apple or Google or Amazon, that's about it. Because of the spaghetti-mess of dependancies, things break down quickly.
"Oh our web site doesn't work? Have you tried the latest version of Chrome?"
"I don't want to use Chrome. I use a different web browser. I don't want Google spying on my web browser, thanks."
"No no, it only works properly in Chrome. Just use Chrome. And make sure it's the latest version."
Am I the only one who thinks that's ridiculous?
The web was meant to be OPEN. We shouldn't need to have a huge, evil corporation watching over our web browsing. But that's not even all of what they control -- now they control what developers think and the tools they use, too.
"But it's so easy! Look how fast I've made code."
How many idiots out there think "doing a deployment" means Kubernetes, and nothing else. They can't concieve of the fact that guys like me were publishing software and yes, deploying it -- before Google even existed.
Companies pop up that will base their entire product around somebody else's code. A couple of years go by, and the code decays and is forgotten. Products written with the latest super-cool whiz-bang code generators or frameworks -- they just don't tend to last very long. That's just not the way I want my software to work.
They've totally trivialized the art of programming. At this rate, soon we won't even be *allowed* to make programs for our own computers anymore. Isn't that where all this is headed?
Even web sites all look the same, because Facebook and Google want it that way. Everywhere you look, these corporations have managed to get control over data streams all over the place. Facebook has data about you, even if you don't use Facebook.
Basically, I can't make a program for your computer, unless Apple/Google/Amazon approves it. And it's all getting worse. Each new version of OS software includes more and more malware, with less and less user control.
IOS 13 includes "COVID-19 contact tracing technology". How wonderful. Yes, isn't it great that these tech giants are lining up to fork over your data to the government, and it's all okay, because it helps to "flatten the curve".
The Windows 10 license basically says that Microsoft can do just about anything it wants to your computer and the data it contains.
People are getting arrested for what they post on Facebook or Twitter. And if you break the rules - THEIR rules, you'll get banned or de-platformed. And you can't do anything about it.
(How many companies have I seen get banned by Facebook for some minor infraction, where product features stop working the minute Facebook decides they don't like you anymore. Imagine having your company's product at the mercy of Google or Facebook or Amazon.)
Google goes around saying it's all about protecting your privacy -- when obviously the opposite is true.
Take technologies like TLS -- programmers are told they must use TLS, because Google say so. Most people believe it's actually there to protect their privacy. When in reality, the whole PKI infrastructure is there to control *who* gets to snoop on your private data.
Google has the nerve to call anybody else's software that does not serve their interests "insecure" or "malware". Users have to be "protected" from this "malware", they say. Meanwhile, they are the largest malware vendor on the planet.
Do you know why programming is not like building a house? Programming is a form of engineering. Because there are unknowns involved, you can't always plan it the way you can plan baking a cake or building a house. There's a kind of art to it, I believe.
I say with absolute certainty that all of the programming fads and religions that have come and gone over the decades have been absolute nonsense. Not that there haven't been good ideas and innovations; I'm just saying overall, the most-hyped technologies really didn't change anything.
But after all these years, I still use the same e-mail client, the same text editor, the same operating system, the same browser, and the same compiler as I did when I was just a little kid. Code I made decades ago still runs, serving it's purpose.
"Agile", "Thin Clients", "The Information Superhighway", "MVC", "fourth generation languages", all that crap. None of it has made me write better programs -- in fact, they have all been distractions. Most of the time it's just a corporation trying to sell their software. Except these days, they "sell" it in a different way.
They used to say "CPU speeds will double every few months", and even called this a Law. Nope, that didn't happen either.
These third-parties are parasites. They wedge themselves in between the programmers who want to make software, and the users who want to run the software. They use every trick in the book to make sure that computer of yours serves *their interests first*.
Free software is not only about the freedom to use software as one pleases. It's about understanding what the software does, and being able to change it to suit your needs.
These days, if you're lucky, you might get to make some cool software. But you can't really get it into the hands of the user without approval from Apple or Google or Microsoft.
In some parts of the world, it's illegal to try and figure out how a program works, or to try and change it.
The only thing that's really, really changed is *who controls the technology*. Now, Canada can't even build a mobile phone anymore. All hardware is made in China. And most software and the internet in general is controlled by a handful of powerful corporations. It wasn't always this way.
Do you really think you know what that smart-phone of yours is doing? Are you really sure that you know? Because if you knew, I'm pretty sure you'd think twice before using it again.
The internet itself is basically in the hands of a few huge corporations -- you know the ones. It wasn't always that way. The internet was once a freer, more open and welcoming network. Users had more control over what their computers did.
A lot of the best, most successful open-source software got developed because an evil corporation was in control of the alternatives. Examples include :
And on and on. These legendary open-source packages exist because the alternatives were evil. And that's the real power of free software. Not just "free as in you don't have to pay for it", but fully free software.
(Even Firefox has taken a disturbing direction lately-- this code was once Mozilla, which was once Netscape. This software was once at the front lines of the struggle for user freedom. But recent versions have begun to include crapware, marketing data collection and other scary stuff. The code is bloated by years of grafting features upon good old Netscape, and now they want to monitor your searches and browsing activity -- for your own benefit, of course.)
At Exocomm, we still write procedural, monolithic, non-object-oriented code. And we're proud of it. It works. It's secure. It's simple. And it won't break down in 6 months when some programmer out there loses interest in the code that's been leveraged our products.
There's nothing wrong with keeping things simple. By doing so, we retain a full understanding about what's going on under the hood. We won't sneer at you because you haven't heard of the latest whiz-bang, super-cool new fad that's going to "change everything". We use a lot of different tools around here, but we never jump on bandwagons.
At Exocomm, we're serious about software reliablity. We don't just suck down binary software from Google without knowing what it does, even if we must reverse-engineer it to find out. And we're equipped to build any applications for customers -- we don't need the permission of an evil corporation to do so.
Exocomm makes software that promotes user privacy and freedom. Just for the record, we've been shipping operating systems before Debian, before RedHat, before Google, before Facebook, and before Amazon. That's why our software just keeps right on running, year after year. We don't drink the kool-aid here. We don't need Apple or Google in order to make software for that product of yours.
Thanks to the efforts of the GNU Foundation and other Free Software Heroes, we've got everything we need to build just about anything. I always have a lot of fun going up against Google and Apple, and it happens more often than you'd think for a little Linux company like us. Here we run Free Software. Software that serves the user, not the other way around.