Hello gorgeous! Yes, you, I’m talking to you
This thread is to track the state of development on Windows in the year 2020. This isn’t a “developments within Windows” thread, although some of that will be included here. No, this is a “what’s it like to develop software in a Windows environment?” type thread. If you’ve ever asked yourself:
- Can I use Windows for programming?
- I want to use Windows for webdev, can I?
- Is it possible to build an OS on Windows?
- Should I buy a Mac or use my Windows computer for programming?
- Will Windows get me through my Computer Science degree?
Well, then, this thread is for you!
Some of this is going to be rehashed from the old thread: Developing on Windows in 2019. There is also a deeper discussion into the Windows Terminal (not PowerShell, not Command Prompt), that is available at Man do i love the new Windows Terminal!. Now, let’s dig in.
Despite the abundance of Linux tools available on Windows, it’s entirely possible to do your software development 100% native on Windows. Something like Golang and Node.js is infinitely easier than something like C or C++, but it is possible.
Visual Studio: Community editions are free for individual and small team use. You are given an entire suite of tools, including a top notch debugger, compiler, text editor, and linter. There are also tools for container support, version control, release management, and much more. Compared to something like Code::Blocks or even CLion, Visual Studio Community is hard to beat.
If Visual Studio Community is too much for you to handle, then definitely consider Visual Studio Code. VS Code is a lightweight text editor that is highly extensible. I have PowerShell, SSH, Golang, Angular, Node.js, C#, C++, Python, Ruby, Puppet, Chef, Docker, and Terraform extensions that make working with those tools a dream. From simple intellisense to a full range of support (right click to create a new Angular component, for example) is available with these extensions. I use the September Steel color scheme Finally found something to replace Nord.
Windows Terminal has been an incredible experience. I’ve used a lot of terminals across a lot of operating systems, and this one is damn near flawless. It’s still in preview mode, by the way. iTerm2, Terminator, Termite, Gnome-Terminal, Konsole… Windows Terminal stands the test of time. It’s GPU powered and has emoji ( ) support!!! OMG . Out of the box it supports PowerShell, PowerShell Core, WSL (all versions), and Azure Shell. Minimal editing of the settings had CMDer working. While I’m here, I may as well give a shoutout to PowerShell. Native ssh (LibreSSL, btw), and full integration with development tools in your environment PATH: go
, node
, npm
, git
, aws
, make
– Really only limited by your imagination at this point.
Docker is all the RAGE these days. It is receiving updates constantly to the Windows platform. Largely, these contributions come from Microsoft, but Docker development itself is targeted towards the cross platform. Their releases from January 2020 include a significant update, including experimental WSL version 2 backends and a Kubernetes update. If your development efforts are going to be released to different architectures, you might want to look into Docker for development. Rather than set up and configure a build server or a database, there is likely a container readily available for you to develop and test against. Deploying containers for production environments is outside the scope of this writing. Always use caution when deploying to production.
If you are a developer that uses Windows as more of a terminal or console, then there are still a range of tools that suit your needs. I mentioned earlier the SSH extension for VS Code. This allows authentication via SSH with the editor, and you can access and edit files or source code within VS Code. All of your extensions intact as well!
MobaXTerm is hands down my favorite multi-environment management system. I can’t tell you how often I’ve laughed maniacally at my co-workers when I see them arranging RDP windows around their PuTTY sessions. I’ve had ten to twenty RDP tabs open, WSL open on two tabs, and a few remote SSH sessions going without missing a beat. Note, to get that many sessions to SAVE you’ll need a pro license. You can maintain the active connections, but the free license will only remember up to 10 or so (can’t recall).
All right, all right, calm down. I hear the cries of help. “My job is forcing me to use Windows, but I NEEEEED Linux!!!” – Enter WSL. The Windows Subsystem for Linux brings a live Linux kernel into your Windows desktop. You have all of the range of commands at your disposal. Every plugin I’ve installed from Vim Awesome has worked as intended. The annoying Windows bell can be disabled via /etc/inputrc
and editing your ~/.vimrc
file for no bell settings. WSL version two, which has a significant performance upgrade with filesystem I/O is going to be released this Summer, likely June or July. Right now you can install it if you’re on the Windows Insider image. However, I’ve compiled C++ and ran some of their more recent functions (C++17 execution and parallelism algorithms) and the difference between WSL and raw Ubuntu or raw Arch was negligible. A few seconds, maybe, at most.
WSLtty is often touted as a better console for WSL than WSL itself lol. I admit, I find myself using it more than I use WSL in the Windows Terminal. Might be out of habit vs benefits, I don’t know. It is nice though.
Brief list of some of the features WSLtty offers
Terminal display features
Xterm-compatible terminal emulation, coverage of DEC VT300 series terminal features and more.
256 colours and True-Colour support.
Comprehensive character encoding support, including UTF-8 and wide character display.
Rich character attributes support, including italic, doubly underline, overline, strikeout, rapid blinking.
Alternative fonts: simultaneous display of multiple fonts.
SIXEL graphics display support.
Emoji support.
Terminal input and interaction features
Character composition with full Unicode support, using dead keys and Compose key.
Windows IME support.
Support for all relevant mouse modes, including pixel-grained DEC locator mode.
Easy copy & paste.
Drag & drop of text, files and folders.
Ability to open files and URLs with Ctrl+click.
Small program size and quick scrolling.
Window handling features and desktop integration
Colour schemes / Theme file support.
Virtual Tabs / session switcher and launcher.
Taskbar tasks (“jump list”) configuration.
Flexible fullscreen, fullsize and border options.
Screen and scrollback buffer search.
User interface language localization support.
Window transparency, including glass effect.
Multiple monitor support, changing DPI support.
You also have your choice of hypervisors on Windows: Hyper-V, VMware Workstation, and VirtualBox. Any other version of Windows you want to run or if you need other operating systems, I get it. I have a virtual lab that emulates one of the production stacks at work: Proxies, app servers, web servers, databases, Elasticsearch, and caching servers. It’s hard to do that with just one OS or Docker.
If you’re looking to start programming and have no idea what to do with the tools in this thread, but don’t mind Windows, you have your pick with that too. C# is cross platform these days, but you can have a grand old time developing with it on Windows. PowerShell is native, and is a phenomenal language for automating tasks or interfacing with Windows. Java, Python, Ruby, and Node.js are just a click away. You can use chocolatey as a package manager, too. No clicks necessary to install software. They have a huge package repository that has pretty much everything. It’s updated and tested regularly.
I plan on updating this thread as I come across new things, experiment with other or updated technology, encounter gotchas and bad releases, as well as share some projects over time. Feel free to share your workflow, favorite tools, projects, and experiments as well.