My entire professional career has been spent in the Windows world – both as a developer (Visual Studio, SQL Server, etc.) and as a consumer (Microsoft Office, Sharepoint, and so on). I know Windows.
About a year ago, though, I decided to take the plunge and set up a new system for development, specifically for working with microcontrollers, FPGAs, and machine learning. My criteria:
- Small form factor, as this was going to sit on my electronics table which is already pretty cluttered with the usual benchtop paraphernalia.
- Compatibility and ease of setting up microcontroller and FPGA toolchains
- Optimized IO for cross-compiling and place-and-route activities
- Low-ish cost
After doing some research, I settled on the Intel NUC – which is a tiny PC that is available in kit or fully-assembled flavors. I chose the kit, along with the following components:
- 8th Gen Core i5
- 16GB DDR4 memory
- 500 GB PCle NVMe storage
By skipping Windows, I could save some money and develop some expertise on a new operating system. All the toolchains I wanted to use had Linux versions available. Some of them were considerably eaiser to setup up on Linux than Windows, so I decided to go with Ubuntu via Pop!_OS.
NUC hardware setup was simple and took less than 30 minutes. OS setup took a bit longer, but was still fairly painless. However, if you’d rather have someone else do this work for you, System 76 offers some really nice ready-to-go setups – including NUC-based systems.
The toolchains/development tools I installed were:
- VS Code (easy)
- ArduindoID (easy)
- ESP-IDF (easy)
- STM32CubeMX/IDE (a couple Java issues)
- Xilinx Vivado (this was mildly painful)
- KiCad (easy)
Even though Vivado took some effort to get running, the improvements in synthesis/implementation time compared to my i7 Windows systems were phenomenal. The cross-compilation times for microcontrollers were also reduced, though not quite as dramatically.
There are a few apps that aren’t available on Linux and make me keep my Windows system handy:
- Visual Studio – VS Code is great for a wide variety of languages and applications, but it does lack many of the features of Visual Studio that I use in my day job.
- STM32 TouchGFX – For generating LCD user interfaces. Windows-only.
- Microsoft OneNote – I was unimpressed with the Linux notetaking apps that I found. Most of the time now I use Evernote in the web browser.
- Paint.NET – I use GIMP when I must, but Paint.NET is my hands-down favorite drawing and image manipulation program.
Admittedly, that’s a pretty short list. Bottom line is that if you’re a developer considering a move to Linux – go for it. You’ll be pleasantly surprised.