22 May 2019 - 5 minute read

Yes, I know that yesterday I said you'd never find me on Windows, but realistically you won't because I try very hard to contain it as much as possible.

The place I work is - at the moment - very much a slave to Microsoft. It's all Office 365, MS Teams, Outlook, Windows Server, Visual Studio, Azure, C#, and all the rest. We're also some kind of "Microsoft cloud partner" or something, but I try not to think about that. Now you might be wondering why I don't just up and leave to find somewhere else to work, and to be completely honest, if you ignore all the shit software, it's a fun job. Everyone's friendly, the office is comfy, and they've created a very good working environment that's welcoming and there's a nice emphasis on everyone being a big team rather than a strict hierarchy. It's not a rare occurrence to have a friendly chat with the CEO. For all its faults, I do really like my job.

The compromise - as you can see - is that I have to do all my development on Windows. How then must I cope?! The answer is that honestly I don't really. Windows is slow, buggy, limited, has terrible workflow, and a countless number of random systems in it that you need to know about to work properly with the machine. However, I have a plan.


Our company work with software from a different company I'll call 'G'. G has an SDK for their tools that we use for a lot of ours as we integrate them all together in the systems we deploy for customers. G offers an SDK for Java and an equivalent that at the moment targets .NET Framework. As we use C#, we're hard-locked to .NET Framework, which only supports Windows and is proprietary. That said, we recognise that .NET Core is a much better system than .NET Framework, and so nearly all of our code is .NET Core with the .NET Framework SDK in there. The only exceptions are the collection of WinForms programs one of the senior devs maintains because for whatever reason he likes that. If the SDK were to be made .NET Core or .NET Standard, then all of our code would immediately become completely .NET Core and thus also cross-platform.

Around half of the devs use Macbooks, which is a little weird, but understandable to a degree. They have Windows in a VM so when it breaks they still have a working laptop. The trade-off is that they run much slower because of the Macbooks' limited hardware. The rest of us have Dell XPSs. The great thing about the XPS laptops is that they already have full Linux support as Dell already sell them running vanilla Ubuntu.

So, what I'm putting forward is that I dual-boot my work laptop with either Ubuntu or Arch. It means I get a much more comfortable and extensible environment and would put Windows in a VM just like the devs with Macbooks. I'd be dual-booting at first so I always have a functioning dev environment setup, but once I'm able to do all my work on the Linux side in the VM I can wipe and expand.

Having Linux as the host means I can now sandbox the Windows VM. I can get great performance out of it using KVM, and keep a snapshot of a full environment so I get a fresh environment each day. This means I never have to put up with clutter in the VM as Windows has been incredibly good at filling my computer with utter crap. If there's an update then I can do that and save a new snapshot. Then I can wrap the whole VM in a proxy so I can see every request that the VM makes out to the internet and cherry-pick only the ones I'm ok with. I can also use programs within the VM to limit what individual programs can and can't do.

Now that's most of a solution, but there's still one big issue to deal with: there's still Windows. For now, there's no choice - G's SDK is Windows-only. However, when it's eventually released as .NET Core, I can immediately shift over to Linux and start developing stuff there. Once I've got a comfy environment there, the VM will only be needed for random little things with customers that made the mistake of building their systems on Windows Server and that colleague's pile of WinForms programs (that I'm definitely porting to GTK eventually).

I sent the CTO an email last week, and while he's pretty swamped with work at the moment, he's said he'll definitely get to my email when he's free. I'm totally cool with that. I understand that I'm asking about something rather outlandish for the company and it's not directly related to actual work for a customer so I've made clear that it's really not urgent. It's just a matter of waiting patiently and then working to address any and all concerns he may have to the point where I'm allowed to go for it. Here's hoping all goes well and I'll report back on how well it goes.


Linux - Work


Copyright Oliver Ayre 2019. Site licensed under the GNU Affero General Public Licence version 3 (AGPLv3).