Can I switch away from Windows to Debian for software development - an exploration
Can I make this switch?
Part of this post was motivated by frustration - I have an ancient (as of 2021) Sony Vaio E 11" notebook that became unusable with the later versions of Windows 10. This isn't surprising, it's specifications are a little short of modern expectations. Since I don't use it for development and I can access Microsoft Office 365 over the web I was free to throw Debian Buster on it. It's a fine little machine and Debian sparked it right back up to the performance it had when I bought it.Background
Normally for development I have two machines - in my study is an Acer Nitro 5, with two SSDs, a big external monitor, 32gb of memory and an Intel Core i7 processor. It's easily the fastest thing I have ever owned. Running on here is Windows 10 Pro, Android Studio, Visual Studio (for .NET core development), Docker Desktop using WSL2, Texas Instruments Code composer studio for embedded development and Heidi SQL for database maintenance.
Upstairs in our makeshift lab is an ancient HP Proliant ML330 G6 that was recycled. It has dual 2Ghz Xeon processors, 32Gb of memory and hybrid disks in a Raid 0 configuration. Before I bought the Acer, this machine was my main workhorse as it was the only thing in the house I had that could run Visual Studio, Android Studio and Code Composer Studio simultaneously. Because of the lack of drivers and weird licensing setup, this machine had Windows Server 2019 installed on it.
Windows Server 2019 is an OK product, it enabled me to have a copy of SQL Server installed for some side gigs I occasionally do which was extremely handy. Installing Windows Subsystem for Linux on it (WSL) wasn't exactly straightforward but it wasn't difficult, a few powershell commands took care of it. However, the people at Docker seemed to be on the road to abandoning WSL for WSL2 and a warning came up that the latest version of Docker Desktop I had on it was the last one I was getting.
Now what - I use Docker Desktop as part of my testing tools - generally if my web server runs on a container on Docker Desktop using Linux containers, it's fine up in ECS Fargate on AWS without any configuration changes. I can't switch the machine to Windows 10 Pro, I don't want to buy a new machine and I can't for the life of me work out which version of Windows Server might have WSL2 available on it. Plus the frustrations: bluetooth on Windows Server 2019 sucks, your virtualisation is weirdly limited (pick Hyper-V and you won't be able to run Android emulators). It seems like I'm boned. Looking at the little Sony Vaio I hatch a plan.
The Install
Downloaded an ISO for Debian Buster (full disclosure, normally I run Debian instead of Ubuntu because the Ubuntu guys seem to have lost the plot chasing consumers with the whole snapd garbage thing - if I wanted a managed environment I'd stick to Windows). Burn the ISO, poke it into the maw of the Proliant and reboot. I thought Debian might struggle a bit with the RAID controller but it didn't bother it in the slightest.
First small hitch - the Proliant (henceforth known as CHUNGUS, it's new host name) has an old ATI Radeon HD6570 in it and you need to download some non-free firmware to get it going. After a successful install using Gnome, the machine wouldn't start the normal X based graphical login. CTRL-ALT-F2 get's you a text based console, bit of quick googling on the Vaio to work out which package to install and now I have X on both monitors. It's quite snappy, although the Gnome people need a firm kick up the pants for removing the minimise and maximise buttons from the windows and you can't see the icons of your running programs without clicking on the menu. It is stupid but fixable by installing an extension. Once that is installed, you have 80% of a Windows style UI which I find comfortable.
Windows Server 2019 with desktop experience really sucks at bluetooth, but Debian found my $5 USB bluetooth dongle and has no trouble pairing with headphones or seeing our development boards advertise over BLE. The Logitech web cam works perfectly, the USB sound blaster works perfectly, all the power management stuff works. In fact, Debian is better on this hardware than Windows Server because I can now use the tape drive for backups without installing some 3rd party software. I'm digging it.
GitHub desktop: half failwin
Don't hate me cause you ain't me. I hate using git command line stuff, having the remember all that guff on top of keeping track of where you're up to in your Java or C# is just too much for my old noodle. GitHub desktop has a .deb and it installs fine, shows up in the menu. For some strange reason it doesn't like to clone repositories but it's fine after that (I think the authentication isn't working for some reason). So guess what, back to the command line to pull some source code. A fail. If I can fix the authentication issue it will probably be a win.
Edit: changed the authentication method to an SSH key - now it's perfect. Was a bit of a faff but start here.
Android Studio: win
Android studio is available as a .deb and the install is straighforward. I cloned my repository, updated Java to version 11 and it's better than on Windows - I have an issue at the moment where the Windows version of Android Studio won't runn the dual debugger on my native library in the app, but on Debian it had no problems whatsoever. Major bonus - on Windows Server you can either enable Hyper-V or you can use Android emulators, but not both. On debian you don't need to choose - got containers, got virtualisation, got emulation. A massive win.
Edit: I may never go back to the windows based Android emulator. Literally everything is better about Android development on Debian compared with Windows. The emulators work beautifully even if they still don't support bluetooth (still need a physical device to do that). However everything else including the networking is painless and I really don't miss the hoops I had to jump through to get them working on Windows 10. Note: it never worked reliably on Windows Server 2019 largely because I had Hyper-V enabled out of necessity for another project.
Docker: win
There is no Docker Desktop GUI for linux that I could find. Installing docker is straightforward, although on Debian it's mostly just command line tools wrapped around containerd. No matter, it starts the sample containers fine.
AWS cli: win
It just works.
Visual Studio... oh Visual Studio Code: win
Rather stupidly I decided to make the job twice as hard on my .NET Core 3.1 systems by trying out Visual Studio Code. On Debian it's good - happy to compile up my server (once I figured out I needed some NuGet downloads). it also interacted happily with the Docker tools so I can fire up the web server in a container and it runs perfectly well. The AWS tools are not as good as the Visual Studio ones (where you can deploy with a right click on your project) but it won't take long to get there. Visual Studio Code is pretty strange to navigate after Visual Studio but it seems like it is worth doing.
One major difference is you can't just right click on the individual components (like console projects for example) and run them in the debugger, you do have to make some new configuration for each project. Not exactly ideal but not terrible either. The VS Code Debugger works fine with the containerised version of my web app which is both surprising and awesome. Code completion isn't as good as Visual Studio so likely I will hang onto it a little longer.
Heidi SQL: fail
Nope, not available. DBeaver is just as good.
Ti Code Composer Studio: fail
I hate this product. It's free from Texas Instruments but they would never have the hide to charge money for it. So incredibly fragile that even their own engineers regularly tell you to abandon your broken project because it doesn't compile and make a fresh one. I had few hopes for this. They have two versions for Linux, a Fedora based one and an Ubuntu based one, which they say they have "tested". Installing on Debian was never going to be easy.
I mean, it does work. I can see the XDS110 debugger on the USB, but they are no longer supporting the older libraries on which my firmware depended so it looks like I will have to upgrade those. If you do firmware development you will be well aware that is something I am loathe to even begin. Good on them for trying (it's Eclipse based so it should work), but I can't use it in it's current state. The sample projects run fine though which means it should work eventually. Will probably switch to Segger at some stage because if I have to practically start from scratch I should start with something useable.
Microsoft Office: fail
No surprises here. I have installed Windows Server 2019 in a QEMU virtual machine for any Windows stuff (and SQL Server) I want to do, it works extremely well. Office 365 over the web is also perfectly functional. I cheated and installed Chrome (not chromium) but I'm no purist. SQL Server is available as a container now so will end up investigating that in the future, although without SQLAgent and SQL Server Management Studio it will feel crippled.
Edit: I ended up giving the image 2 CPUs and 12Gb of memory. Much more functional and the rest of my system is idling away on very little memory as it is (yes, even with notorious memory hogs like Android Studio and Chrome running). A definite improvement in performance.
Microsoft Teams: win
Major surprise here, it works and it works very well.Zoom: win
Zoom is available as a native client, it works very well, found the Logitech camera and the audio seems to work well.
The Answer
The answer is yes, I can make the switch, pretty much everything I deploy is either Unix based or embedded in some way anyway. I spend a lot of time on the command line in WSL2 so Windows at this point is getting close to being a legacy system. Ubuntu may have been an easier choice although that still wouldn't solve the Microsoft Office issues. Most of the things that half work have a command line work-around that I will likely just script, and everything that flat out doesn't work runs fine in a virtual machine. I won't be completely abandoning Windows 10 Pro just yet but the clock is ticking.