Once upon a time, the world of developers was split into two halves: One half was composed of Windows developers, who created most of the productivity apps that powered PCs (and, occasionally, servers). The other half comprised Linux and Unix developers, whose work focused on server-side development.Today, however, as the worlds of Windows and Linux move ever closer together, the distinction between Windows and Linux developers is disappearing. Gone are the days when you had to specialize in one ecosystem or the other.
Traditional Windows Development
Up until a few years ago, the world of Windows development was characterized by a few broad traits.
One was a set of programming languages and frameworks that were designed primarily for the Windows world, like C# and .NET. Although Windows developers sometimes also worked with languages like Java, which was engineered as a cross-platform language, you knew you were a Windows dev if you found yourself touting the importance of coding in a “pure” object-oriented language like C#.
Most Windows developers were also united by Visual Studio, the IDE of choice in the Windows world. Visual Studio is certainly not the only IDE that works with Windows environments, but it was Microsoft’s homegrown solution.
Finally, since many programmers in the Windows world were writing code for money and were under pressure to deliver software quickly, they arguably cared more about writing applications that worked than about coding perfection. It probably helped that most of their code was closed-source, so no one in the world at large judged them for it (except, of course, when source code leaked, as it occasionally did.)
The World of Linux Programming
Meanwhile, the programming communities that built software for Linux--and other Unix-like operating systems--were a world apart.
They had their own application formats, which varied widely between different Linux distributions. They tended to code in languages like C, although they also embraced self-compiling languages like Python long before they become popular in the Windows world.
And at least in theory, developers in the Linux world (most of whom were building server applications, many of them open source) embraced Unix philosophical principles about simple interfaces and clean code.
Linux? Windows? For Developers, Who Cares?
Fast forward to today, however, and the world of programming looks very different. The toolsets and philosophies that programmers use in both the Linux and Windows ecosystem have converged, along with the operating systems themselves.
Today, it’s hard to think of a programming language that is strictly compatible only with Linux or Windows. And although certain languages may still be more oriented toward one operating system than another, there is nothing stopping you from running, say, C# code on Linux using Mono. (And .NET itself, of course, is now open source.) Meanwhile, a new generation of programming languages, almost all of them designed to be highly OS-agnostic, have sliced away some of the marketshare of Windows- or Linux-oriented languages.
When it comes to application packaging, containers have provided Linux and Windows developers alike with a packaging and deployment solution that works in more or less the same way, no matter which operating system you use.
From a philosophical perspective, too, Linux and Windows programmers look much more alike today. Heightened awareness of the importance of secure coding, combined with the DevOps movement’s emphasis on software efficiency and consistency, have pushed developers of all stripes to unite around shared principles of quality and security.
The migration of virtually everything to the cloud also has played a major role in the breakdown of distinctions between Linux and Windows developers. For many programmers, cloud-based IDEs have replaced ones that run locally and work only with one operating system or another. Many of the applications that developers write today run in browsers and are powered by Web-native development frameworks rather than ones that are specific to Windows or Linux. For many programmers, learning the ins and outs of AWS’s IAM framework is more important than mastering Windows access control or figuring out what /etc/group does on Linux.
Sure, fundamental differences between Linux and Windows remain. Writing an application for Windows still requires contending with the peculiarities of the way Windows partitions hard disks and organizes file systems. (Or is it the Linux file system hierarchy that is peculiar?) EXE files show no signs of disappearing anytime soon. A majority of Linux applications are still open source, whereas a majority of those on Windows remain closed-source, despite Microsoft’s now-well established love of open source.
But by and large, I don’t think it makes much sense anymore to think of Windows developers as being distinct from Linux developers. We’re all simply developers now.