I know this isn’t security related, but I figured I’d pass it along since I read this morning that the whole open source movement (or at least large swaths of it) are in financial trouble as an unintended consequence of COVID-19. I had meant to write up this little experiment of mine eventually, but given what I read this morning, I figured I’d do a first part now to tee it up, then in a week or so do a part 2 to talk about progress so far, and then a part 3 about a year or so in.

By way of background for this, it’s important that you understand that for almost 40 years I’ve been a “dyed in the wool” Windows guy. I don’t really get “emotional” about operating systems the way some people do since I figure your OS is a tool and whatever you know best is probably the one that will minimize hassle. That said though, I used Windows for work — a lot — and had been using it at home also a lot.

At home I used PC DOS in the eighties, then MS-DOS, then Windows 3.x, then Windows 95… and so on down the line until Windows 10. My BBS in high school (a WWIV-net board called “The Shadow of Death”) was on MS-DOS, the computer(s) I used in college were all various flavors of DOS/Win3.x and aside from a brief stint of using OS X (which lasted until Apple decided to change architectures to x86 and thereby make all my existing software useless) I used Windows exclusively. At work, same thing. There was a ton of different equipment I used at various jobs (HPUX, Solaris, AIX, Digital Unix, Linux… even OS/2 at one point) but the environment I liked the best was Windows. When I was a developer, I wrote a GINA for Windows, built PKI software on CAPI, wrote ISAPI and NSAPI filters — even did various low level stuff. Windows and MS-DOS were so much part of my identity that I still to this day use the username “int 21h” sometimes for stuff [if you’re not familiar, int 21h was the MS DOS software interrupt for various OS services].

Anyway, I was blindly oblivious in my status quo until about six months back. Then, one day I received an error on my primary laptop. The error message consisted of a system modal dialog box (which basically means that the user can’t do anything else in this or any other application until the user responds to it) telling me “The parameter is incorrect”. That’s it — no information about specifically what parameter, who was supplying the parameter or why, what module it was happening in, or really any other details.

No big though, right? “Just close the box and move on,” I hear you saying. But you’d be wrong. Because apparently there was some loop that would just cause the box to come back immediately after you close it. No way out. Take a look at the image below and imagine if it blocking everything else on your desktop or laptop with no way to get rid of it.

I was irritated to say the least. I tried debugging it, researching it, digging around in the event log trying to get more information, loading in safe mode, and rolling back to the last restore point. I even tried factory resetting the machine via the control panel (“system reset” I guess they call it). The second it came back up, the alleged parameter was once again apparently incorrect.

As a quick aside, this has to be the single worst error message I’ve ever encountered. Not only does it not tell you what parameter is at issue, what value the parameter currently has, what the parameter is supposed to be, why it’s incorrect, or what a correct value for the parameter should be instead. I mean, those would be a bare minimum compared to, I don’t know, printing a stack trace or writing to the event log about where it’s happening. And also, come on, system modal? Really? Plus there was nothing of use in the event log – whatever was causing this wasn’t logging the right way even though the “parameter is incorrect” bullshit is *clearly* a standard error message. It really is. It’s defined in winerror.h – error #87 (0x57): ERROR_INVALID_PARAMETER. So basically, some application (or more likely part of the OS) was choosing to get ERROR_INVALID_PARAMETER, call FormatMessage() to render it into text, and then not write it to the event log, but instead put up a system modal message box. I know, I know…. It makes zero sense to me either. I suppose I could have attached a kernel debugger but goddamn it, I shouldn’t have to.

Anyway, having no Windows boot media (yeah, that’s on me for not making a restore disk), I decided to install Debian. I figured at the time that I’d “limp along” until my cheap self worked up the strength of will to buy a new machine. Turns out though that the experience was a pretty positive one. In fact, it was so painless (in fact increasing my productivity in a lot of ways) that I decided I’d try getting rid of as much commercial software from my life as I could as an experiment. Meaning, using it for as much as I can to see what the impact was.

I knew there was some closed source software I couldn’t get away from so I decided I’d make some exceptions from a “quality of life” and “still being able to do my work” point of view. Those exceptions were:

  • Games – Games that I play can be closed source.
  • VMWare Workstation – Since I don’t love VirtualBox and use Vagrant quite a bit, VMWare stays. Not to mention that stuff’s expensive and I already bought the license (both for VMWare Workstation itself and also to Hashicorp for the Vagrant VMWare module).
  • Windows VM’s for Work – Windows guest virtual machines for work situations where there’s no other choice are acceptable.
  • Websites (including cloud services) – Since I don’t know websites are implemented on the provider side, I figure there’s no way to police that so can be whatever.
  • Phone stuff – My phone is Android (which is itself open source), though I do have the Google non-free additions and a bunch of apps I’ve already bought. They stay.
  • Conference software – Since I need to meet with people and they all want to use their own tools (like Zoom or Teams or whatever), I’ll install what I need to in order to accommodate them (though if I’m scheduling a call though, I’ll be using Jitsi thank you very much).
  • Slack – Again, because work and the client UI > the web UI.
  • Insync – For syncing files. Yes, I could do this with rsync, but I like the UI better.

And that’s it! Anyway, I’m about 5-6 months into this so far and it’s working out pretty well so far. I’ll give you more of a detailed play by play (because there are a few problem areas I’ve encountered) as time allows. There are a few “gotchas” that you might not expect… I’ll tease it a little bit by telling you that: a) it’s much less painful than you’d think, b) I’m WAY more productive now than I was before this on the whole, and c) it’s much more economical. It’s not all peaches and cream — there are a few areas where I think the road could be “smoothed”, but more on that in the next post.