The Expense of Abstraction

The Expense of Abstraction

Have you noticed how abstract the world is? Just getting in the car and driving to work seems fairly simple because you do it so often, but beneath that process is the discipline involved in driving, the mechanical processes of your vehicle and the physics of the components in your car necessary for facilitating a comfy ride.

Even riding a bike isn’t as simple as it seems, since you need to have a good sense of balance and know to exploit mechnical advantage when changing gears to get the most out of the energy you put in.

Abstraction in the context of driving a car or riding a bike is necessary because not focussing on all the details of the activity is important for efficiency and because you will likely be performing those activities many times, and don’t want to be concerned about minor details: you just want to drive or ride your bike to that favourite park.

In the context of computing, abstraction is much more vast and complex. Switching on a machine to search the web for cat videos, for example involves many processes happening at different abstraction levels. When you switch on your PC, the machine initiates the Basic Input Output System responsible for doing initial hardware checks, scanning for bootable volumes and then, if it finds a bootable volume, passing on control of the system to that boot loader contained in the volume.

After that, the boot loader then loads a kernel which in turn loads the Operating System. Whew.

Without going to much further into detail, your operating system now passes control to you: the user, after which you are presented with programs which listens to your mouse presses, movements and keyboard strokes, and let you launch other programs, such as Firefox.

The operating system actually processes user input events from the hardware, but it passes those events to the applications you are currently using. Operating systems such as Microsoft Windows also have extra events for dragging and dropping too.

When Firefox, or whatever browser you normally use, has loaded you can now browse the web and search for cat videos. As you do that, Firefox is again responding to your input continually until you quit the application.

As you watch cat videos, the sound (if any), is pushed to a buffer provided by a program or service which mixes your audio with other streams, and then pushes that buffer to an audio driver. The audio driver sends a buffer to your sound card, producing an analog signal that comes out of your 3.5mm audio jack. Your operating system may have extra software to affect sound which may support custom frequency boosting, stereo enhancement or proprietary Dolby SRS enhancements.

The process of displaying the videos on the screen is more complicated. A window in Firefox, regardless of the operating system, occupies an area of the screen which corresponds to a buffer in video memory. That buffer is also has a place in hardware, namely the graphics card, which also makes an analog (for serial connected VGA) or a digital (HDMI) signal your monitor can use. The signal has to be encoded in a certain way to work with the timing of your monitor, and may use a vertical synchonization signal. The monitor cannot draw everything at once.

It’s fair to argue that sound output and video display should be abstracted, and just like the two activities mentioned earlier, they don’t deserve attention to their implementation details, but I will argue that software should, because while everyone shouldn’t have to study how software works, we should be allowed to. We can open the bonnet of a car, and examine how it works. We can fix bicycles and, more easily than a car, adjust them to suit our needs.

Sadly, the software most people use is proprietary, difficult to study and is licensed, not sold, to you. This has serious consequences for security, reliability and suitability, and you are placing your trust in a for-profit company to deliver and maintain software they have licensed to you for certain uses only.

Imagine not being allowed to open the bonnet of your car to check the engine because you will risk breaking an End User License Agreement. You may not be a mechanic, but you should be allowed to examine the internals of your car, and perhaps if you are, make modifications to it.

I’m not saying computer software is easy and anyone can understand how it works by looking at it, but everyone should have a right to do so without legal consequences. By using free operating system like Ubuntu, you still keep a lot of the same abstraction as you would when using Windows, because it’s communicating with the underlying hardware in a similar fashion. And by studying the underlying functionality and how software and your computer works, you can better understand faults on your computer and possibly fix them yourself, or at least describe your problem more clearly so that an expert can fix your problem more quickly.


There are currently no comments

New Comment


required (not published)