Thoughts on Open Source


I used to not understand open source.

Why would people give away their source code for free? Going through the software revolution of the 90s, Microsoft was the king of software. I followed the Microsoft’s decimation of WordPerfect, Borland, Lotus 1-2-3 and Netscape as a kid. And Microsoft didn’t give away software for free, no, let alone source code! Microsoft charged folks for Office, Windows, Visual Studio, etc. To their credit, they still do to a certain extent. So to me, it all seemed counter-intuitive – something that was free, in my mind, would not see any quick progress due to the lack of economic motivation behind it. My overall train of thought could be summarised by this grumpy nerd’s post.

Then Linux Torvalds came along with this :

Hello everybody out there using minix –

I’m doing a (free) operating system (just a hobby, won’t be big and professional like gnu) for 386(486) AT clones. This has been brewing since april, and is starting to get ready. I’d like any feedback on things people like/dislike in minix, as my OS resembles it somewhat (same physical layout of the file-system (due to practical reasons) among other things).

— Linus Torvalds

And it’s amazing how others have contributed to the project ever since. Linux is probably the most successful example of open-source software. From the Linux kernel, countless distributions have emerged. Heck, even Android has the Linux kernel in it. Red Hat, CentOS, Ubuntu, Debian, Linux Mint they all share the linux kernel, which is actively being maintained by the Linux Foundation.

There’s a lot of open source software out there, and it’s all a beautiful mess. Companies leveraging on open-source software have been successfully built. Red Hat is a prime example of this, which generates revenue through support and training contracts. And did you know that WordPress, the blog software that you are reading this on, is open-source?

The problem with proprietary software is this : When you don’t know what’s going on, you don’t know what’s going on. Proprietary APIs usually hide the implementation details of a function, so you are at the mercy of whoever holds the proprietary software implementation. You would be in danger even. I’m sure Snowden would agree. With open source, all the implementation details are out there, whether you want to understand it or not. Furthermore, with proprietary software, once the company decides that it is no longer in their financial interests to continue with the work, it is thrown away.

I’ve concluded that to make large scale software without a whole Fortune 500 company like Microsoft or Google behind you, open source is the way to go. I use ZeroMQ in my work, and this is a great example of this. The author has successfully built a community from which many other projects have sprung.  Once folks find that the open source code is useful to them, they will have it in their hearts to contribute back. Even if it is just fixing a bug or two.

My other open source loves are CSound and  AudioKit , all great audio programming open source projects from which one can learn. AudioKit is fairly new, but has enjoyed quick growth due to many developers wanting a Swift audio development framework (pun intended).  It was the CSound code that inspired me to delve into DSP code.

Revenue for the little guy? I’d like to think of somehow who buys stuff I make as paying me to keep it going. It is not easy maintaining a piece of software amidst the ever-changing tech landscape.I would say it takes more energy to maintain software than to shit one out.

Open source is simply a developmental methodology that was ahead of its time. It’s a methodology that places community over software. It’s a reflection of the human need to contribute and make a difference. I that software, like nature, given enough time undergoes evolution. Great software stays and gets better with time.


The Secret to Life is Just Yes and No

I was listening to one of my favourite comedians, Bill Burr. He said something like this.

The secret to being happy is just yes and no. When someone asks you to do something and you feel like doing it, say yes. When someone asks you to do something and you don’t want to do it, say no.

Sounds easy right? The truth is, most of us don’t do it. We suck things up, and then hate ourselves or blame others for it. We blame others, our circumstances, the government, our environment, our culture, our jobs, anything. Perhaps, everything else you think when you are compelled to say yes when you really want to say no, is just noise in the head.

Let’s give it a try guys.

A Tale of Two Bridges

Came across this meaningful story in the ZeroMQ documentation…

Two old engineers were talking of their lives and boasting of their greatest projects. One of the engineers explained how he had designed the largest bridge ever made.

“We built it across a river gorge,” he told his friend. “It was wide and deep. We spent two years studying the land, and choosing designs. Then we hired the best people and designed the bridge, which took another five years. We contracted the largest engineering firms to build the structures, the towers, the tollbooths, and the roads that would connect the bridge to the main highways. Under the road level we had trains, and a special path for cyclists. That bridge represented years of my life.”

The second man reflected for a while, then spoke. “One evening me and a friend threw a rope across a gorge,” he said. “Just a rope, tied to two trees. There were two villages, one at each side. At first, people pulled packages across that rope with a pulley and string. Then someone pulled across a second rope, and built a foot walk. It was dangerous, but the kids loved it. A group of men then rebuilt that, made it solid, and women started to cross, everyday, with their produce. A market grew up on one side of the bridge, and slowly that became a large town, since there was a lot of space for houses. The rope bridge got replaced with a wooden bridge, to allow horses and carts to cross. Then the town built a real stone bridge, with metal beams. Later, they replaced the stone part with steel, and today there’s a suspension bridge standing in that same spot.”

The first engineer was silent. “Funny thing,” he said, “my bridge was demolished not long after it was built. Turns out it was built in the wrong place and no-one wanted to use it. Some bastard had thrown a rope across the gorge, a few miles further downstream, and that’s where everyone went.”

I’ve encountered this many times, and it’s not just about programming. There was a time where I was going to be the definitive music store in Singapore, and I sunk in a huge amount of money (for me at that time) into goods and websites and all that. What I failed to do was to even test whether there was a demand for the particular goods I imported here locally. I found out that hard way that most Singaporeans are pretty brand-conscious regarding music instruments/accessories. On hindsight, what I should have done was to “test” the products out by selling them on or some other online store before trying to import stuff wholesale to get a feel of the sale-ability of the items. There are other ways to test whether there is demand for your pro, duct, like running Facebook/Google ads to gauge the number of clicks. Frequently folks who start something are eager to sink money into it, as if throwing more money into something would increase the number of people who want it.

I’m an advocate of an iterative approach to things, so as not to waste too much resources on something that perhaps no one wanted in the first place.

Don’t Fall in Love with Programming

I see people posting frequently things like “I have learnt like 9 languages but I don’t feel like I am confident of my programming ability.” And then they start this spiral of self-doubt thinking stuff like “maybe I’m not made for programming at all”, or “I just don’t think logically”. The key, in my opinion, is to do projects, and finish them. I’m not talking about examples in books. I mean real projects that have benefit, tangible or otherwise.

I know, Pragmatic Programmer says to learn a new language every year. But I don’t buy that. I rather flesh out the task/project at hand, and learn the tools I need to do the task properly. Learning a new language every year to me, is not pragmatic at all. *sorry about the dig* Moreover, companies nowadays are using the language to get buy-in to their platform. One obvious example is Apple with Swift/Objective C. Once you are invested in the language, the inertia to switch is higher.

Personally, I like programming. It’s fascinating how typing in characters allows me to create games, and synths. But I don’t love it. I’m frequently impatient to finish programming to see the end product. Of course, there *is* no end – but that’s another article for another day.

Programmers can get really religious with programming languages. It’s like a nerdier version of the Android / iOS thing. There’s always some aspect of a language that will be better than the same aspect in another language. If you fall in love with a technology, you put yourself in the danger of becoming an advocate for a certain programming language. There’s always something better for certain tasks.  You can get really obsessed with things like type inference, concurrency primitives, and so on. But here’s the thing – most people don’t care. The job of a programmer is to create solutions, not code.

Fall in love with the output. The magic you create after a few months of hard work. It could be a software framework, a fart app, a game, or a synth. Whatever it is, fall in love with the satisfaction of knowing that your code is out in the wild and is of some use to somebody.