When I first started writing embedded software, the environments that I found to be the most efficient and easiest to use were only available on Microsoft Windows. In fact, it wasn’t uncommon for microcontroller suppliers to only supply their development tools for Windows. Developers interested in using Linux or a Mac were either out of luck, had to emulate Windows, or devote a considerable amount of time mish mashing together toolchains to build their own environment. Today, most tools are now available on multiple platforms, but there can still be advantages and disadvantages to each. In today’s post, we will look at each host operating system and examine the pros and cons of using each for developing embedded software.
Embedded Software Development on Windows
First, for microcontroller application developers, Windows is still the most prevalent host operating system that I see developers using today. There are several reasons why Windows is the most used. First, for popular and major toolchains and development tools, installation executables are provided which makes installations nothing more than a double click. Second, many businesses still use Windows as their default go-to business machines which are highly supported by their IT department. Third, development tools on Windows tend to be more integrated than on other platforms. Finally, many companies will release new tools and updates to Windows first with other platforms coming later. This gives developers working on Windows the advantage of having the latest and greatest tools along with bug fixes before developers on other platforms.
Things aren’t always rosy though when working on windows. For example, developers who are using a lot of open-source tools or compilers may find that setting up the environment on Windows can be very challenging, especially if the tools were written for Linux first. In these cases, developers working on Windows may need to install Cygwin or other tools in addition to jumping through quite a few hoops in order to get their development environment setup. There is also the issue that usually Windows applications are so integrated, they sometimes don’t provide developers with the command line options or access to expert-level tools that allow a developer to really customize the toolchain.
Embedded Software Development on Linux
Linux is one of those host environments that I simultaneously love and hate at the same time. For developers, Linux provides a very configurable environment that allows the developers to fine-tune their environment and have complete control over everything that goes on in it. Working within Linux often does not abstract out the details, which gives developers a greater understanding as to what is going on behind the scenes of their development environment and toolchains. Linux is free and open-source software is often written for it, which makes it sometimes easier to build and use certain software components.
Linux also provides some interesting challenges to developers. First, the developer has to be comfortable working in a terminal, which often feels like a backward progression given how much effort has been put into GUI tools and seamlessly integrated development environments. Next, Linux is so configurable that I’ve found it can be a nightmare to configure. So much changes, so fast, that installing a recently updated toolchain successfully can sometimes take hours or more if you don’t work within Linux day in and out. Finally, developers on Linux tend to make assumptions about the environment setup which makes duplicating environments and setting up tools even more of a nightmare because they skip steps and assume the next developer knows how to track down the ten steps they skipped in their write up.
Embedded Software Development on Mac
One of my favorite host environments to develop embedded software on is the Mac because it provides the best of both Windows and Linux environments. Today many vendors and tool suppliers provide an easy way to install their environment on a Mac. The user interface provided makes development easy and efficient and is usually very close to the Windows-based version. When a toolchain requires a terminal and Linux toolchains, developers can just go to the Mac terminal and get the benefits of running a Linux machine.
I’ve found working on my Mac seems to provide the best of both worlds with only a few drawbacks for developers. First, Macs are a little more expensive than a Windows or Linux machine, although I’ve found that the investment is well worth it (for me anyway). Next, Mac environments often don’t offer the full feature set for the tools that are available on Windows. The tools are close but if you look carefully, Mac interfaces tend to trail the Windows tools by as much as six months. This may or may not be an issue but it’s something to keep in mind.
The host operating system that is chosen to develop embedded software has become all but a moot point. There are still some advantages to using one operating system over another although these differences are quickly becoming blurred. Over the next several years, these minor differences will undoubtedly continue to shrink to the point that it doesn’t make a difference one way or another which host operating system is used. The only difference remaining will be the effort to set up and maintain the toolchains.
In fact, many developers may need to use more than one host environment. For most development, I use Windows in the office with a Linux machine for projects where Linux makes more sense. Outside the office, I use my Mac with a Windows virtual machine for tools that aren’t available natively. At the end of the day, it’s far easier today to move between host operating systems, and in the future, it will become nearly seamless.
Jacob Beningo is an embedded software consultant who currently works with clients in more than a dozen countries to dramatically transform their businesses by improving product quality, cost, and time to market. He has published more than 200 articles on embedded software development techniques, is a sought-after speaker and technical trainer, and holds three degrees which include a Master of Engineering from the University of Michigan. Feel free to contact him at firstname.lastname@example.org, at his website www.beningo.com, and sign-up for his monthly Embedded Bytes Newsletter