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
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.
### THE 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
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.
, 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
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.
Copyright Oliver Ayre 2019. Site licensed under the GNU Affero General Public
Licence version 3 (AGPLv3).