Open-Source vs Closed-Source

These days software runs just about everything. From the thermostat on your wall to your coffee pot, to your car. Most people don’t put much thought into code, but somebody has too. No software just appeared out of thin air. A living, breathing human being had to write every piece of software we use today.

If only people were perfect.

The closed-source model…

The closed-source software model involves drafting an idea for a piece of software, designing how that software is going to operate, actually making that software, and then a whole lot of testing to make sure the software does it’s job.

The goal of the closed-source software model is to make money. Period. Full stop. Even when closed-source software is free; it’s still paying somebody’s bills. The edge-case to this is when a developer makes private software that only benefits themselves, but I’d be willing to bet that even half of those developers are still making profit off the software in some way.

The idea is to keep a developers intellectual property a secret so that others have to go to the developer if they want to use it. Sometimes this can be in the form of offering free software as a service so that developers can harvest valuable data or charge advertisers money for ad space (think: Gmail). Sometimes it’s a developer finding a publisher or retail outlet to market their product (think: games). Regardless of how closed-source software generates revenue, the whole system comes crashing down if your competitors are able to clone your product and improve upon it, or if your users are able to obtain the product without paying for it.

The open-source model…

The open-source software model starts off a lot like the closed-source model. For whatever reason a developer or group of developers will undertake a project out of desire or need, and then proceed to design, make, and test their software.

The goal of open-source software is varied, but usually it’s to fill a void. Oftentimes the developer knows before they begin that they’ll likely never profit off of their software. They’re usually doing it for incentives you can’t (or won’t) buy.

The idea with open-source is to allow anyone to read, edit, and share software so that it may positively effect a larger audience. There is really only one way to do open-source correctly; by giving away your source-code and explicitly encouraging people to change and share it with whomever. By making an entire piece of software available a developer invites peer review for the purpose of making their software better. Bugs are found, improvements are made, and features are added by the community for which the software was intended. This not only benefits the community, but also the original developer who gets free ideas, direction and code.

The advantages of closed-source…

We know that closed-source software aims to turn a profit. As the saying goes; “it takes money to make money.” Most closed-source software projects cost money for organized companies to develop. Companies have policies, procedures and quality standards. They can look at the big picture behind a piece of software and be more selective in it’s design. They have teams of people to design a piece of software before anyone writes a single line of code. Then they acquire the necessary talent and get to work. They are able to pour resources into design and development and expect certain results from a full-time staff. They usually have more tech on the table at the start of a project, whereas open-source developers usually work with what’s available to them.

When you pay for a piece of software you can usually trust that it’s going to work right out of the box. Each part of that software (UI, back-end, audio, ect…) was probably developed by an expert in the field. You can usually trust that every feature has been tested to find it’s breaking point, redesigned and tested again. To be fair, you usually get what you pay for. Then to top it all off, someone packaged the whole thing up in a nice installer with guaranteed documentation and some measure of tech support.

The advantages of open-source…

Open-source software is constantly evolving and is much more resilient to aging. When old developers get tired of a project they go onto something else and fresh developers may take their place.

Bugs get documented. This might sound minute, but how many times have you had to fix an issue with a piece of software only to find 100x forum posts on the official website with no answer? With open-source there is no better feeling than posting a comment on a Github repo that actually impacts a projects development.

Open-source software projects have “fans” rather than “users.” Users who deal with a specific project are usually more enthusiastic about a project and willing to point out and talk about flaws or missing features. They brainstorm changes out in the open with real code rather than just wishing software would change. They also have the ability to go under the hood of that software and tweak it themselves.

Open-source software is defined by a “copyleft” license which grants a user the right to obtain, modify, and distribute the software without major restriction to how it’s used or how it’s distributed.

The disadvantages of closed-source…

Closed-source software does not let users view the source code for a project. For software that uses compiled, mini-fied or obfuscated source code this means that bugs stay hidden from users until they are disclosed or patched by the developer. While many of the bugs found in commercial software aren’t visible to the end-user, these bugs end up living in the software forever as potential vulnerabilities waiting for an incentivized party to find and exploit them. Developers lose incentive to dig deep into their code once a seemingly stable product ships. They are much more likely to fix bugs that gather support tickets than they are to look for un-sanitized input fields (which can cause more problems than I could possibly list). So while you’re probably going to get an onclick event fixed in closed-source software, you’re probably not getting the security fix until it’s already too late. This is because nobody has seen the source code since the final product shipped.

Developers also duplicate a lot of effort between firms and even teams within the same firm. How many times do you think different Google developers have written the same exact javascript function because they didn’t know or have any interest in what their neighbor in the next cubical was working on? Probably a couple hundred at least. How much code do you think Dropbox wrote that Google and OneDrive already wrote? Here we have three platforms all providing the same basic service while employing three entirely separate payrolls to write what is essentially all the same code. We don’t see this paralleled in open-source unless something is missing from software. For open-source examples of progress instead of duplication just look at OpenOffice and it’s fork LibreOffice. Look at Ubuntu. It was a fork of Debian linux that gave birth to, Lubuntu, and Kubuntu. According to Wikipedia, Nginx was “written with an explicit goal of outperforming the Apache web server.”

Closed-source software is defined by licenses which restrict the users right to posses, modify, distribute, and use the software. Oftentimes additional code is added to closed-source software to specifically prevent unauthorized change, distribution or use of the software as deemed fit by the developers.

The disadvantages of open-source…

The problems with open-source software (including mine[2]) are overall quality, consistency, documentation, and usability. It usually takes a long time and a lot of volunteer talent to create an open-source project that delivers the same quality as a closed-source project. That being said, for the layman open-source might not always be the most economical option; even if the price of open-source is null.

Most open-source projects are solo endeavors. That means a single developer pours their ideas and their talent into a project with skills and weaknesses out in the open. If you have 10x developers working on a project with no QA and no written standards or procedures code becomes hard to manage real quick. To expect the same level of QA testing from a solo developer or small team as an actual company is asking a lot. Even well designed projects can take years of tweaking by many contributors to work out all the bugs. Users of open-source software carry something of a responsibility to the project to provide feedback to the developers. Companies can spend money on R&D, crowd-sourcing, social experiments, and beta testing. Most open-source projects were started out of necessity or desire, and don’t reflect any one industry or demographic in particular. Therefore every user of open-source software is essentially the QA department, testing every feature for misbehavior and poor workmanship.

It’s less about software and more about ideals…

Lets face it, most electronic chores can be performed with either open or closed-source software. However, we owe a lot of what our machines can do to open-source software. Apple, Google, and all the other big names in software and digital services have been using open-source software for years. Whether it’s Linux powering your cable box, WiFi router, or Android phone, ffmpeg transcoding your streaming audio, or g++ compiling closed-source software for large companies, closed-source is powered by open-source. You can choose to throw money at organizations who promote themselves, or you can become engaged with organizations who promote all of us. It all comes down to what knowledge is worth. As far as I’m concerned, if Google isn’t willing to share their algorithms then I’ll write my own and give them away for free. They’re using their knowledge as a weapon, so it’s up to the rest of us to use our knowledge as power.


Leave a Reply

Your email address will not be published. Required fields are marked *

* Consent To Store Information (GDPR Requirement)