I’m getting old.
When I was young, I was fascinated with hardware and programming low-level stuff to do something nice as an experiment.
I got into programming DOS programs in assembly language (8086). In school, I was fascinated with 6502 assembly language (which wasn’t really that far from 8086, the concepts were mainly the same). As an Electronics Engineer student, my hardware thesis involved creating a hardware interface that detects acidity (pH) in soil with the added twist that it was plugged into the printer port (yes, PCs had parallel ports back in the day) and a program interprets the values that was in the printer port and records them. And yes, the program was in Visual Basic (shocker, right? An unusual use of the Evil Empire’s program environment).
Even friends from the Computer Engineering class asked my help in developing their computer interface projects (which included a voice recognition project for security and a vending machine – which detects what money was inserted into the machine).
One may ask… OK, you’re talking about the past, what has this got to do with Linux?
Let me give you an opinion that will be a shocker to you… Linux might never make it big into the desktop.
Let me start by telling you my experience with Linux. Don’t you get picky with me saying that Linux is the kernel. I am familiar with that.
I started delving into Linux when I was a sales agent of an isp. During that time, all of us sales agents have 8 hours of free internet (dial-up). I started into connecting my 33.6kbps modem through trumpet winsock and downloaded my first linux distribution: Monkey Linux. From that time on, I was hooked. Tried other hobby linux distributions (trilinux, looplinux, etc, settled for a few years with peanutlinux and gained quite a number of friends in the forums), and for a number of years, I was happy. I became an open source advocate. I remember downloading the 100Mb peanutlinux distribution for almost a day (dialup, whoooopeee). I brought linux into a company I worked for as an instructor (before that, I taught short courses for people like MS Office, and Basic computer instruction – I remember teaching a group of PLDT operators, yes operators, the ones that answer the line when you call 109 or 108 for long distance dialing). As I developed instruction modules for Visual Basic, I developed instruction modules for Linux (made even a mod of Peanutlinux, with Jay’s help in giving instructions, called Berkeley Linux, for internal use and passing on to students of the courses) – complete with Gnome environment (1.x at that point), and with WINE, to run some windows programs like winamp on Linux. As usual, I included Xitami and php in the mix of that mod, as standard.
I even got to create instruction modules for OpenOffice (then 1.x); but before that I used StarOffice 5 (when the license was not GPL, but rather free for non-commercial use).
Then reality set in. At first I didn’t mind it. Sound issues. Graphics issues. Wifi and network issues. I simply moved from one distribution to the next (PCLinux, Ubuntu, Mint, Fedora, and currently my laptop distribution, Meego).
And you know what? Even until today, these are still issues!
So, what’s keeping Linux from ever conquering the desktop? A big issue are drivers.
I love linux, don’t get me wrong. Don’t ever accuse me of being an troll – as you’ve seen on my blog, I dig linux.
However, one thing I’ve noticed is that the API for drivers is virtually non-existent. At least with OSX, they have a framework for extending or creating drivers (usually in userspace). Windows has also a framework for driver development (take your pick, WDM, vxD for older version of windows, etc)
When you update kernel versions, you have to recompile your drivers. Yes, I know, there is dkms. I’m not talking about that.
Linux simply has no formal frameworks for drivers. There was an attempt by Intel before (1998 to be exact), to create a framework named UDI, but was dissed upon by Richard Stallman and open source advocates. An excellent point for UDI was given by a former developer in this forum post.
I am a pragmatic person. I use whatever tools are necessary to get the job done. And that means using windows if that gets the job done – I would’ve preferred using open source, but if there is no software equivalent in linux (which is usually the case, unfortunately), I use windows or osx. Looking back, that decision in my opinion would fit in the category of boneheaded decisions of the open source community.
Linux advocates have a NIH syndrome. Instead of using stuff that works, they create a new one, usually REALLY buggy.
Case in point: pulseaudio. A big heaping piece of dog poo. Well, it has gotten better, but the latency issues are soooo annoying.
Yes, useability has gotten better, but when suspend/hibernate issues still exist even today, and wifi issues still exist, there is something definitely wrong. A friend of mine bought a laptop and installed Ubuntu, or Mint on it, and found out it didn’t work. Tried other distributions, didn’t work too. He almost gave up, but was lucky enough to get some instructions from friends who instructed him to get some firmware code through his driver cd and some command line stuff. I was even surprised by this even today, broadcom drivers are an issue (despite having broadcom-wl drivers and bcm driver stuff already).
Even my meego laptop, the lcd brightness control doesn’t work. And I had to compile OpenVPN for it myself (which reminds me, I’ll have to compile the newest OpenVPN and upload to the repository, when I get the time).
The list goes on and on. Enough of my rant. I’m an old guy. My experimentation and tweaking with the OS days are getting to an end (real life has come in – need money to pay my bills). I just need something that works.
Just to end (almost), I’ll give you some pseudo-code for a harmless virus I made as an experiment to learn how DOS works (this simple non-overwriting .com program became my thesis for a fifth-year paper on computer viruses – I created this experiment during my summer vacation in second year college).
Ordinary pseudo-code for a typical .com program:
My assembly code:
jmp [viral code]
check if it is already resident (calls a modified int 22h hook with subfunction to see if it is installed)
move viral code above DOS program memory
call int21h function to modify interrupt table to chain int 21h to viral code
edit 3 bytes at the beginning of the program to the original code
jmp [beginning of code]
[int 21 viral code]
Sounds unconventional, right? But this experiment I made in college helped me a lot in how OSes and computers work. DOS was excellent during that time because they provided a unified API – if I used purely assembly code and manipulated IO/Disk hardware registers directly, my code would have gone way over 1000 bytes (and wouldn’t have worked on all computers at that time) – even using an int13h bios code function would be more complicated to do. After all, it was all about developers. I would like to thank Ralph Brown for his excellent DOS Internals book (duh)! With this knowledge incidentally, I was able to make an anti-virus program in Turbo Pascal for the Tadpole virus (created by some students in another university) during my third year college.
If only linux had a unified driver interface, plus a unified media interface, and graphics interface with frameworks, then it would have leaped above windows and osx. Unfortunately, with the state linux is in, and the bickering and infighting of different groups in them (and misguided open source fanaticism), I really doubt linux will ever reach mainstream status (maybe android and chrome os).
Enough of my rant. What do you guys think? Am I a grumpy old man? Or do I talk sense?