Learn the ins and outs of remote development:
virtualization, containers, dev containers, and cloud.
Software development has become a big, sprawling affair—lots of developers, lots of locations, and lots of services. It can be a bit much, and companies are looking for new approaches.
Remote development is a set of ideas that let developers do parts – or all – of their work on their desktop, on a company server, or in the cloud. This approach is appealing for many reasons: securing intellectual property, resource savings, better developer productivity, and more.
Let’s dive into the spectrum of remote development: what it is, how it works, who it’s for, and why you should care.
Developers write code on a computer. Sounds simple, but this means development is local: on their computer, with all their tooling, environment, and data. The developer is responsible for installation and ongoing maintenance.
That responsibility becomes a burden. Remote development gives developers a gradual series of new solutions:
Let’s take a look at each of these in more depth.
Working directly on a local computer has been the standard development approach for decades. As mentioned above, this approach has drawbacks:
In most cases, developers need environment isolation with a predictable “computer” to work in. Without isolation, “works on my computer” became a standard response to issue reports.
Local virtualization was a first step towards improving this burden. Products such as VMware, Parallels, Vagrant, and the Windows hypervisor provide an isolated “computer” within a computer. These tools provide a standardized hardware environment (CPU, memory settings, and operating system.)
Isolated sandboxes have advantages, but at a cost:
How does virtualization work in practice? If you have a macOS laptop but need to develop a Windows application, a product such as Parallels can give you a Windows “computer” inside your Mac. Regardless of the virtualization used, JetBrains IDEs provide the same programming environment across all operating systems.
Virtualization gives physical isolation of hardware. But what if you are more interested in logicalisolation of the operating system and applications?
Containerization lets you specify the application as logical, specified units. You specify the version of an operating system, the application dependencies, and the pre-configured service processes which constitute your application. You can write these decisions into a configuration. Team members will then get the same logical unit.
Unlike virtualization, containerization does not provide hardware isolation. The upside: very fast container startup times. Fast execution, along with sharing of resources, means containers fit nicely into development processes.
Containerization provides a number of benefits:
While containerization has become quite mature, it still has some drawbacks:
Containerization products have become quite popular: Docker, Docker Compose, Windows Subsystem for Linux (WSL), and Kubernetes all enjoy broad usage. As such, JetBrains IDEs have integration with all these, making them a natural part of development.
Containers help run your application during development. But development involves developer tools and environments which are also complicated to set up. Can containers help run your tools? What if you could combine an application and its tools into one environment, and even run it remotely?
Development Containers (Dev Containers) provide such an environment. A dev container is an all-encompassing workspace for an application, development tools, libraries, and more. Developers can walk up to a project and get everything they need, locally or remotely, for a productive development environment.
Working with dev containers provides a number of advantages:
Since dev containers are based on containerization, it inherits some of the same drawbacks. Additionally, dev containers:
Dev containers have seen broad adoption by vendors. JetBrains IDEs now support dev containers as a full-featured development environment for your projects. Dev Containers can be run remotely via an SSH connection or locally using Docker.
Containerization – and especially dev containers – helps manage development workflows. What if a company wants to move some or all of development away from a laptop, to a centralized facility?
Cloud-based development delivers a fully-remote workspace: the hardware, operating system, application, tooling, and the IDE in a public or private cloud. Developers only need a local “viewport” application to get the same familiar experience.
These remote workspaces provide a significant change in development, with many strengths:
Remote workspaces have drawbacks:
JetBrains CodeCanvas, Google Cloud Workstations, Gitpod, GitHub Codespaces, and AWS CodeCatalyst are examples of popular private- and public-cloud development solutions. Additionally, these products support JetBrains Gateway, bringing our JetBrains IDEs into remote development. Also, JetBrains Fleet is our built-from-scratch IDE designed around a remote architecture.
Remote development is changing how companies and software teams work, whether logically-remote on a laptop or physically-remote across clusters in the cloud. The remote-development approach gives companies opportunities to streamline development, reduce cost, and secure intellectual property; all while staying one step ahead of the competition.