10Jul

OS Showdown: Windows vs. macOS vs. Linux for Web Development

“Operating System A vs. Operating System B” (all the while Operating System C users storm in saying “Our OS is actually better than either of yours!”) is a hot topic in the developer community. This heaty discussion is a worthy successor to the “Mac vs. PC”, “Coke vs. Pepsi”, and “apples vs. oranges” posts that appear every now and then.

In the IT-sphere in general, this discussion primarily concerns Windows, macOS, and Linux: although developers do understand that each OS is a specific tool made for specific purposes, it’s often hard to resist the temptation of comparing their features, pros, and cons. With JavaScript arguably becoming the lingua franca of many of today’s developers, this discussion is carried on to the web side of things.

What about web development, though? On the surface, all operating systems are equally capable of performing web dev-related tasks: after all, HTML, CSS, and JavaScript are universal and require no proprietary IDE. As we take a closer look, however, we start to see the intricacies of each OS (e.g. file structure and app support) and how they affect the development process. In this article, we will examine these intricacies and outline the pros and cons of each OS in the web development sphere.

OK, so what does web development include?

“Web development” is a broad term encompassing a lot of different tasks and activities. After all, distinct categories like front-end and back-end both refer to web development. To provide a level playing field for each operating system, let’s assume that we’re working on a small project and doing everything by ourselves:

  • Writing HTML, CSS, and JavaScript code.
  • Creating the website’s visual design.
  • Prototyping the website’s UX and UI
  • Organizing the project via version control software (e.g. Git)
  • Deploying a server.
  • Organizing packages and modules via package managers (e.g. npm or yarn)
  • Interacting with a database.

Most web development tools are OS-agnostic: code editors, preprocessors, design software, package managers, and testing frameworks are almost always cross-platform. Still, each operating system makes some of them easier/harder to realize than its counterparts — let’s see how they compare.

Windows

OS Showdown: Windows vs. macOS vs. Linux for Web Development

Throughout Windows’ history, this OS has been the dominant force in the computer market: led by Bill Gates in the 90s and by Satya Nadella today, Microsoft has been a real software powerhouse. Despite its popularity, however, many developers argue that Windows isn’t a great development environment because of its slowness, chunks of legacy code, and bloat (which is defined as computer program becoming perceptibly slower, using more memory, disk space or processing power, or having higher hardware requirements than the previous version—whilst making only dubious user-perceptible improvements or suffering from feature creep)

Windows command-line tool, PowerShell, has been an improvement over the standard cmd.exe, but it’s still a subpar experience compared to the all-powerful Terminals of Linux and macOS. Here’s a fitting example of PowerShell’s capriciousness:

  1. Try to delete a node_modules folder that has files whose filenames are too long, but fail.
  2. Install a node module… to be able to delete that node module.
  3. Success! (But at what cost?..)

Due to using file handles for every operation within the file system, Windows is much slower than either Linux or macOS when it comes to I/O operations — this means a significant performance decrease in projects with a lot of files. As organizing third-party dependencies via package managers like npm and yarn and interacting with them via Git is vital for modern web development, static-site generation, automatic image optimization, or packing bundles on save will be much slower on Windows.

Microsoft’s attempt to reclaim the browser throne via the new Windows 10 default browser, Edge, wasn’t successful; in part, because a number of features are unsupported. Here’s how caniuse.com rates Edge and other browsers in terms of feature support:

OS Showdown: Windows vs. macOS vs. Linux for Web Development

Edge, of course, isn’t “a program to download Chrome” (the fate befallen on Internet Explorer), but it still fails to catch up to its competitors.

Enter Windows Subsystem for Linux

The criticism we’ve outlined above is pretty harsh and it may seem that Windows is unsuitable even for a simple “Hello world” page. Microsoft team took notice — and introduced the Windows Subsystem for Linux, which, as the name suggests, is a virtual layer that can house almost-fully-featured Linux inside Windows.

Microsoft’s GitHub account has been incredibly active — and not because Microsoft bought GitHub. ¯\_(ツ)_/¯ As of late, the company has been embracing open-source:

  • Linux-like command line, complete with commands like sudo and Linux file structure — this can be achieved via console tools like GitBash or Cmder.
  • Windows Terminal, new terminal application (which will possibly replace PowerShell in the future?)
  • VSCode (Idea for a fun adventure: build a time machine, go back 10 years in time, and tell the developer community that Microsoft will build the best open-source code editor)
  • Edge moving to Chromium, an open-source web browser project.

These changes show that Microsoft doesn’t want to build a walled garden around its products; instead, it chooses to cooperate and collaborate. For a web developer, it means better Windows tools and experience!

Linux

OS Showdown: Windows vs. macOS vs. Linux for Web Development

Before we begin, it’s important to remember the importance of Unix-like systems in the web development sphere; namely, their ubiquitousness across the majority of both consumer and enterprise server equipment. Since web development relies heavily on interacting with servers, Linux and macOS users will feel right at home, utilizing familiar Terminal commands and navigating the file system.

As Linux is extremely security-focused, its main web development-related features have to with system logic and file system structure.

System logic. To ensure system integrity, Linux allows access to important files only to users with elevated privileges, done via sudo. This is a great method for web server security as it prevents unwanted operations and fosters vigilance at the same time (after all, sudo rm -rf became a popular cruel joke for a reason)

File system. Linux has a file s file system that is very different from that of Windows: everything is either a file (even an external device connected to a Linux computer) or a process. For that reason, Linux users have no problems interacting with servers and organizing their file structures, which often has to be done via command-line interfaces — so questions like “Why is this folder called ‘/’ ?” are avoided.

All in all, Linux is an ideal environment for web development that is more focused on the back-end; however, Linux users often suffer from the lack of software. A striking example is the Adobe Suite: Photoshop, Illustrator, XD, Spark, Dreamweaver, and InDesign are some of the apps that many web developers find really useful. Although these programs aren’t the prerequisite for building websites, they do streamline and enhance the development process.

This puts Linux users in a rough spot: while Windows and macOS offer tools like Photoshop and Sketch, Linux user base has to rely either on the open-source community or developers who acknowledge Linux.

macOS

OS Showdown: Windows vs. macOS vs. Linux for Web Development

In a sense, macOS is a sweet spot between Windows and Linux, excelling at typography and user experience.

Another great feature is the special character keyboard which makes finding and typing special characters ever so easy. Although they are usually created via escape characters, there are a plethora of universally used symbols like the em dash (—) and smart quotes (using “ and ” instead of straight quotes, “, which are used in software code) — they’re particularly useful when writing texts.

In Windows’ case, typing special characters becomes a memory exercise: “Which alt-combination produces the em dash?” (Answer: alt+0151) A possible universal solution was suggested by various blogging platforms and content management systems: reformatting double dash (–) into em dash (—). It does solve the problem — until you need to paste a code snippet that features double dashes (which are frequent in command arguments like –version):

Soshace-user:~$ python3 --version
Python 3.6.7
Soshace-user:~$ python3 —version // -- got reformatted into —
python3: can't open file '—version': [Errno 2] No such file or directory

macOS as the “soul” of a computer is inseparable from the “body” it gets shipped in — Apple devices like Mac mini, iMac, and Macbook. The most popular Apple computer for web development is by far the Macbook; for many years, it’s been boasting the reputation of a device that is well-built, has a nice operating system, and tends to last long.

Additionally, macOS users may often feel that their favorite platform isn’t really evolving: with macOS products bringing Apple only ~6% of its revenue stream, the company isn’t really promoting macOS as a development platform — unlike Windows and the WSL/open-source.

Conclusion

Although each OS has a fair share of loyalists and haters, the web development community is a unified group. “Hello world” is a phrase written on different devices, operating systems, and programs — thankfully, most web development tools perform well on any operating system, so it all comes down to personal preference in the end. 🙂

About Meteor.js

Today we’ll start some articles’ chain about stack we are using in our every day’s work. We’ve talked about React already and to continue our narrative, here is an interesting technology which we love here in Soshace.

GraphQL

Let’s talk about basics of really fresh approach in client-server communication: GraphQL. Let’s answer few questions first to start with this technology. What is the difference between this technology and common REST API (e.g. express implementation of this one)? That’s simple: GraphQL provides you instruments to execute queries to server, not send the requests, so you create query and you know for sure what a result you expect to see.

Leave a Reply