simon_bisson
Contributor

GitHub takes Visual Studio Code online

analysis
May 12, 20206 mins
Cloud ComputingGitHubSoftware Development

GitHub Codespaces give you and your team a VS Code development environment as part of your repository, along with threaded discussions.

A network of clouds with binary code.
Credit: Thinkstock

In his keynote at GitHub’s recent Satellite event, CEO Nat Friedman said, “In the age of social distancing, people are turning to social coding.” We’re working from home, using the tools built into GitHub to replace the gaps in our workflow that used to be filled with interactions with colleagues. Tools such as GitHub have become more than the place we store and share code. They’re now our virtual workplaces, encompassing more of our development workflows.

The relationship between GitHub and Microsoft is an interesting one. Microsoft owns GitHub, but it is run as a separate entity with very little contact between the two organizations. It’s a division that makes sense, as GitHub’s role as a global repository for proprietary and open source software requires that it be a neutral hub—a United Nations of software. That’s allowed GitHub to continue running on its own infrastructure, built on its own tools and technologies. Meanwhile Microsoft has increased its dependencies on GitHub, building its own tools on GitHub’s Electron framework and using GitHub in its own development processes.

Build it in GitHub Codespaces

It’s interesting to see GitHub building one of its newest features on top of a Microsoft technology (albeit one with a strong open source foundation). Microsoft recently changed the name of its Visual Studio Online cloud-hosted development environment to Visual Studio Codespaces, and Satellite saw GitHub launch a similar product using the same name.

It’s important to note that although both Visual Studio Codespaces and GitHub Codespaces are built on top of Microsoft’s Visual Studio Code editor, they are very different products. As Visual Studio Code uses GitHub’s Electron, it’s a TypeScript application. That makes it easy to port to the Web and modern Web browsers, with its Monaco code editor open source. Microsoft is using Codespaces as a way to extend your desktop development environment into the cloud, and share it with ad hoc collaborators. GitHub treats Codespaces quite differently, giving you a browser-hosted editing environment as part of a code repository.

The idea behind GitHub Codespaces is to give collaborators access to code as it changes, wherever they may be: reviewing code, working with issues that have been raised, or reviewing code that’s been submitted with a pull request. It’s a way of quickly dropping in to a repository to edit code if you’ve got a free minute and a modern Web browser. If you prefer to use an editor, the Visual Studio Codespaces extension for VS Code will also work with GitHub Codespaces.

Building cloud development environments in GitHub Codespaces gives you the option to define the default resources the editor uses as part of a repository, using familiar dotfiles. Users can have their own configurations, which load from their profile. There’s support for VS Code’s existing extension model and the Visual Studio Code Marketplace, so you can install the extensions you need to work with a specific project. If you’re working with a Go app, you can install the appropriate Go extensions. The same for Rust, C#, and Flutter; the GitHub Codespaces environment is as flexible as Code itself.

To speed things up, GitHub offers a repository of preconfigured versions of Codespaces containers, with instances for Node, Go, .NET Core, C++, and more. These include tools to build and debug code, running in the Codespaces container. By delivering an entire toolchain in a container, you’re able to do a lot more than edit code, for example testing and verifying changes before merging a pull request.

Each Codespaces editor will have a version of the VS Code GitHub extension to help manage issues and pull requests, as well as working with multiple branches of your code. You can clone repositories, working with the familiar Git workflow. There’s scope for Codespaces to work with private repositories, but the beta will only support personal and public repositories. If you’re using GitHub Enterprise, you can use other tools to work with your code; maybe even Visual Studio Codespaces.

GitHub Codespaces need a lot of resources to run, and although the service is free during the beta, it’s likely to be a pay-for feature once it launches. Each instance requires a container to host the Visual Studio Code language servers. The UI is in your browser, but much of the heavy lifting required to run VS Code’s developer tools needs to run in the Codespaces container. With many millions of developers using GitHub and each Codespaces container requiring two cores and 4GB of memory, usage could add up very quickly. However, GitHub is planning to offer pay-as-you-go pricing, which should keep costs to a minimum.

Discuss it in GitHub Discussions 

Editing in the cloud is only part of GitHub’s expanded social coding story. A lot of GitHub’s recent work has been making it easier for project maintainers to work with the community that has coalesced around their code. While it’s possible to have Slack or other collaboration platforms as part of a combined workflow, open source projects are often unable to pay for plans that allow them to archive discussions. Separating conversation and code makes it hard to provide direct links between the two, and although comments and issues inside GitHub offer one way of linking them, they’re still much more formal than most social media.

Satellite saw the launch of GitHub Discussions, a way to embed threaded conversations inside a repository. Somewhat reminiscent of old school Usenet newsgroups, they’re a useful way to build collaborative documentation around a project. Stack Overflow uses a structure like that, but conversations are more free form with the option of voting for content, as well as direct links to each discussion element. Maintainers can use links to bring content from Discussions into other documents, so a Discussion element could be linked to an issue to allow further conversation.

Conversation management is important, and maintainers have the option to lock down Discussions when useful conversation is over. Role-based access can control conversations, for example, providing a discussion everyone can read but only approved collaborators can post. If Discussions can live up to its promise as a focused, relevant space for collaborating around code and documentation, it should go a long way to helping developers work on GitHub without switching context between applications and losing focus, as well as avoiding long conversations over shaky, insecure video links.

Remote collaboration isn’t easy, so it’s important for community-oriented sites such as GitHub to offer as many different tools and services as possible, with the aim of making it easy to work together, no matter where or how you work. GitHub Codespaces and GitHub Discussions look to be important steps along that journey, and it’ll be interesting to see how they’re used.

simon_bisson
Contributor

Author of InfoWorld's Enterprise Microsoft blog, Simon BIsson prefers to think of "career" as a verb rather than a noun, having worked in academic and telecoms research, as well as having been the CTO of a startup, running the technical side of UK Online (the first national ISP with content as well as connections), before moving into consultancy and technology strategy. He’s built plenty of large-scale web applications, designed architectures for multi-terabyte online image stores, implemented B2B information hubs, and come up with next generation mobile network architectures and knowledge management solutions. In between doing all that, he’s been a freelance journalist since the early days of the web and writes about everything from enterprise architecture down to gadgets.

More from this author