Tuesday, September 27, 2016

My History as a Linux User, Part 1

This is a bit of a personal history post, which I hope explains where I come from and what I like to do in and around Linux.  I hope that this blog can be a bit educational, and a bit fun.

What better way to start than to tell a bit about my use of Linux over the last bit, and what I'm interested in.

The Computing World in 1992.

It's a much different technological world in 2016 than it was in the early 1990s.  Recall for instance that Microsoft was not the omni-present juggernaut that it is today, although it was already a significant power in the computer world, thanks to its MS-DOS and early office and developer tool suites.    Microsoft had guys like Charles Simonyi, who had helped create the digital office at Xerox PARC, who then went on to successfully commercialize (with MS Word) based  heavily on the PARC GUI word processor (BRAVO), and guys like Dave Cutler and Gordon Letwin, two of the powers behind the NT throne, who got their start at DEC designing important bits of VAX VMS. 

Big Software was a thing built by big corporations.  Open source, loose knit informal collaboration, the idea that a major software system could be built and surpass these commercial systems, rendering much of their economic value moot, was heresy.

If you wanted a computer and you had less than 10 thousand dollars to spend your basic choices were:

* The unix workstation world, with Sun as the acknowledged leader, and other companies like IBM and HP having their own hardware lines and their own commercial Unix variants.    Machines like the NeXT also fit into this category, with its Mach/BSD-derived kernel.  

* The 1990s mac world, which had a stronghold in desktop publishing (thanks to the laser writer) had a pretty terrible operating system, without proper inter-process memory protection, the whole thing was prone to crashing, but the user experience was pretty nice for people who liked mice and graphical user interfaces far nicer than the DOS GUIs of the time.

* The PC world, mostly running DOS and Windows 3.1, mostly on a mix of 8086, 80286, and 80386 CPUs running at speeds between 4.77 and 25 megahertz.   IBM's OS/2 exists but only ever achieves a tiny uptake.   After a rift develops between IBM and Microsoft, they go their separate ways, and Microsoft's architects that built the OS/2 2.0 kernel turn to build OS/2 3.0, later renamed NT.

* If you wanted to run a unix-like operating system on your PC, your choices included the free and very limited "minix", early 386 BSD ports which were very immature and snarled by BSD license squabbling and under constant legal threats, and a few commercial (but still quite functionally limited) unix varieties such as SCO Unix and even Microsoft's Xenix.

In that heterogeneous mostly-closed-source computing world, on the 25th of august, 1991, a young Finnish student posts on the usenet comp.os.minix newsgroup that he intends to build a kernel for the wildly popular Intel 80386 powered PCs of the era. Not something "big and professional like GNU". Just a little hobby.

I think it's safe for me to skip telling the parts that everybody knows about the rise of Linux. For anyone without much exposure to Linux, it may be surprising to them to know that Linux represents the work of tens of thousands of open-source developers, some of which got paid and most of which probably did not get directly paid, for their efforts.  Entire desktop computing software ecosystems including general productivity software emerged, and matured.  And yet,  Linux never overtook Windows on the desktop. That was always going to be "next year", the year of Linux on the desktop.

My first exposure to Linux was hearing about it on the nascent internet, while a computer science student in 1991, as the Linux world started to take off and the first distributions arrived in 1992, I ordered them and had them shipped to me on CDs.   The first Linux distribution I tried was one I ordered from a mail-order Linux CD company. I ordered SLS (later became Slackware) and Yggdrasil linux, back when the Linux kernel was at about version 0.96.    My previous experience with Windows 3 and with OS/2 did not do much to teach me about Unix systems.   I had used an IBM RS/6000 workstation in university, and was somewhat familiar with unix commands.  I had learned a bit of the vi editor, and how to use unix mail, usenet news, and ftp and gopher clients.   The "http" bits of the world wide web were just getting started, and in 1991 I had not yet heard of Tim Berners Lee, nor of http, and the total number of "web sites" on what we would call today "the web" was probably around 20.

Linux at that time ran on exactly one type of hardware: Intel 80386 and compatibles from companies like AMD.  Since that time, Linux has been ported to run on tiny little computers you could fit on the end of your thumb, and onto IBM mainframes that cost over half a million dollars, and run on three phase 600V power.

Linux has curiously never taken over the desktops of the world. That year never happened.  Open Office got close to breaking Microsoft's office monopoly, but it turns out that most people in most businesses in North America seem to need or want a bunch of commercial software that doesn't work on Linux.   Steve Balmer was right in his chant about "Developers, Developers, Developers".  What has saved Microsoft from obsolescence is that the desktop PC world still retains a huge place for Microsoft's technologies, especially in small and medium sized businesses and healthcare.

My Linux Use from 1992 to 2016

After initial experiments with Yggdrasil and SLS, and later Slackware, I bounced back and forth among RedHat, SuSE, Debian, and a few others.   I always had a hard drive in my PC that booted up to a Linux distribution, and also had Windows on another drive, and used one of the many boot managers over the years, to dual boot.

As a professional software developer on Windows, I generally got paid all this time to write commercial software, on DOS, Windows 3, Windows 95, OS/2, and NT, and then Windows 2000, XP, and so on.   On weekends and evenings when I was bored, I always ended up playing around and learning more and more on Linux.

I spent some time learning GUI programming, with GTK and QT, but I really hated those toolkits, and never found one I really liked.   I fell in love with Python, and stuck with it since my first time using it, and used it for a thousand different things, but never really did a lot of GUI programming with it.  When I needed a small utility on Linux, I would use the tkinter user interface layer, and once or twice also built a few things using the  wx widgets python wrappers.   I was generally a fan of the Gnome desktop over KDE, and generally a fan of VIM and GVIM over EMACS.    Some time around 2010 Gnome and KDE both simultaneously abandoned usability and usefulness and became incredibly limiting and stupid, and since then, I've been a big fan of XFCE.

Besides doing some Python and C hacking on Linux, its odd that I never got into Pascal on Linux.  My experiences with the leading Pascal on Linux, Free Pascal, were never very good. These days I have to admit that Lazarus+FreePascal on Linux is pretty nice.  Maybe it was because it could never really reach my expectation of being "Delphi on Linux" that I felt happier hacking around in Python, or C.   I have never much liked C++ either.  It feels like a nice language is hiding inside there, but someone put a horrible bunch of extra stuff on top.  I've met lots of other people who feel the same, but nobody seems to agree on what the exact nice subset is.  So that's C++.

The distro I've spent the most time on is Debian. In the last ten years, I've always had a Debian image on my main PC, and a Debian VM on all my Macs.  Debian is a beautiful distribution made by open source purists. While I'm not one of the "purists" myself, I recognize their purity has been useful and a good service to the community.

For the last two years though, I've been running SuSE as well, and have now switched full time to OpenSuSE tumbleweed on my main home computer.  I use the SuSE Virtual Machine Manager (powered by QEMU/KVM) to run virtual machines.   I absolutely adore SuSE, and I'm going to write a few detailed blog posts later about why I love it, and what I think it does right, which is an enormous list of things.   It sounds like a stereotype, but SuSE has the feel of being engineered by a bunch of Germans.   Tumbleweed has the feeling of being an experimental aircraft, which is continuously being patched up. When it works, it's like driving next year's Mercedes Benz.  When it breaks, it's educational for me in a way that no Linux distribution yet has been educational.   Tumbleweed is a rolling release distro that has a lot in common with the Debian "SID" (unstable) distribution, which I have also spent a long time with.  I just can't get over my curiosity about the next version of Gnome, the next version of KDE, the next version of XOrg (or XFree86 back in the day, remember that?), and everything else.    Every time I upgrade Tumbleweed, it's either a disaster or it's christmas.  Mostly it's Christmas. It works better than it has any right to, and breaks far less often than I deserve.
I only recommend it to home users on home PCs for people who don't mind if their computer updates and then fails to boot up, and what's more, wouldn't mind too much if it formatted your entire hard drive. It might do that.   A much saner choice for most people would be to run OpenSUSE LEAP.

Why I Like Linux and what I like to do on Linux.

The design of Unix systems, and Linux as one of the best of these Unix-like systems, is something that I think has been done better than most of the alternatives. That doesn't mean I don't get mad when I make a mistake and the power of Linux is deployed instantly to pay me back for my mistake.  I might complain, but I really do appreciate the power, and the design of the system.   I sometimes make little forays off into the BSD world (FreeBSD, DragonflyBSD) which I might blog a bit about later, but by and large, it's Linux systems that fit my head and my brain better than others.

I'll give one example that I think is interesting.  Linux systems typically can be updated and maintained online longer without reboots than Windows systems can be.  Why is that, do you think?  I think it has something to do with the way they are designed.  You can start and stop services in Windows. You can kill the explorer shell and restart it in Windows, but in Linux you can do almost anything without rebooting, short of a kernel replacement.  There are no equivalents to chroot jails in Windows. There are no equivalents to many many things.

Using Python, Go, C++, or Java on Linux is a thing of beauty, compared to using the same languages on Windows.  I have a hard time explaining why that is, but if my readers want to know, I'll go into it.

To me, Linux is the dream platform for the developer. Along with VM software to run Windows in a "penalty box" where it can't see most of my files and can't take over most of my computer, I can do almost anything I want on my computer.  One of the things I like to do a lot is download and install new software.  To keep my main environment from getting insane, I tend to do that inside VMs.  I have about a dozen VMs running different versions of Linux and different tools inside them.

It's a playground.  It's frankly amazing. Every now and then, I think of what I could do when I first got my commodore 64 and what I can do now, and I'm a bit breathless.

There's also a little hobby I have of trying obscure programming languages. I might post a bit about Pharo (smalltalk), and various Lisp/Scheme languages that I've been messing around with on here.  If you're reading along and you're rather new to Linux, you're my desired target readership. Tell me what you want to know more about.

How I feel about being a Linux User and a Windows User in 2016

Where it seems that Microsoft is truly not in the epicenter anymore is on the web.  In 2016 we're in a world of containers, clusters, and big data, web scale key-value database technologies,  load balancing, caching, and web CDN, in which Microsoft technologies are not important. Key internet technology leaders like Google, Facebook, Amazon, and thousands of others run Linux alone.

As a developer who has always loved and played with Linux but always made my coin working on Windows it's strange to see Windows relegated to a place of almost zero importance in the most important areas of software progress in 2016.

In 2016,  Microsoft has actually ported .net to run on Linux, and Oracle has made Java seem like a technology controlled by an evil empire that I should not want to use.  Microsoft actually seems like the good guy these days.

Why is that, do you think?  I think I know. Other than for gaming, many people might be perfectly happy to run Windows and then shut it down when it pisses them off or gets in their way.  That's about where I'm at in my journey with Windows.  About ready to kick it to the curb.  I'd actually rather pay $99 for a Windows that got out of my way and didn't may me mad, than get it for free and have to deal with its condescending and slimy tactics that remove me from the helm of my own computer.   Windows 10's sense of entitlement to my PC reminds me of auto-pilot from the Pixar film, Wall-E.    The fat captain reminds me a lot of me, in many ways, a typical Windows user, who has become quite used to being ordered around on his own ship.

Windows 10 tells you that you can't disable Windows update. You don't actually know what it sends to Microsoft. You don't actually know much about what it does. If it leaves you a bit of disk I/O bandwidth and compute time to do some things you wanted to do, then that's a bonus.   But you're going to get the extra stuff you didn't want also.   If you didn't pay for it, and someone gave it to you for free, and it came from a corporation like Microsoft or Facebook, then you're not the customer, you're the product.   I don't much like it. I don't think I'm all that paranoid or all that much of a privacy activist.  But I just look at the choices, and I think, I'd rather my computer was running Linux all the time.  I'll fire my my windows 10 vm now and then to run some Windows development tools (Delphi), and I'll boot back to the native Windows VM when my teenager wants to play some games on Steam.  But other than that, I'm a linux guy at home.

How I feel as a Linux User/Hacker in 2016

To me, it's clear that the future of software is open.   I believe in getting paid as a software developer, and I believe that technical support and service (subscription, SAAS models) are the future of getting paid for software.   This future frees the individual and organization making technology decisions from vendor lockins, and will empower users to do whatever they want with their computers.

The desktop world is probably going to stay much like it is, with a little Linux, a lot of Windows, and a fairly large number of developers on Macs.   Companies that can adapt to the new world, like SuSE, Gitlab, and Sencha, are going to do fine, I believe.  Microsoft is going to be around for the long run, as well, as they're pivoting, and will adapt and thrive in the open software future.   They will continue to contribute more core tech like their already open sourced C# compilers and .net frameworks into the open source world, but will probably never open source Windows or Office, but instead will focus on turning those into revenue generating services, rather than boxed software products.   Wow would I like to be wrong there.

To me the exciting software development is happening in the cloud, on the web, on Linux.  That's what interests me today. That's what this blog is about.