My 16 Months at Red Hat
Tags: opensource, github, java, linux
Published: 2018-10-13 01:54:04

The University of Toronto offers an internship program called Professional Engineering Internship (PEY). Each year students join a company for 16 months to gain experience (either in Software Development or a few other fields). Last year/this year (May 2017-August 2018) I did my internship with a software company called Red Hat. Red Hat is a company that contributes a ton to different open source projects (you might know them for [Fedora](https://getfedora.org) or [RHEL](https://en.wikipedia.org/wiki/Red_Hat_Enterprise_Linux)). All of the interns were assigned a different open source project to work on. In my case, I worked on quite a few different things mainly the YAML Language server, Eclipse Che, and Eclipse Theia.

Initially, I began working on the YAML Language Server for YAML files. For those who are not familiar with language servers, it is basically a language smartness provider to integrate features like autocomplete, go to definition, find all references and alike for programming languages or file formats[1]. Language servers work through the language server protocol which specifies which data will be sent to the server during different events. Additionally, it defines which results will be sent back from the server to the client as a response. For example, if you are editing a YAML file and you want to autocomplete at a specific location, the client is going to send a completion request to the server and the server will respond with valid completions. I worked on the YAML language server project mostly alone so I was responsible for creating all of the features (hover, validation, auto-completion, etc). It took about 4 months until release and has been steadily growing in downloads ever since. I'm currently working part-time at Red Hat so I still maintain it.

After the YAML Language Server was released I started working on Eclipse Che. For those who have not experienced Eclipse Che, it differs a lot from traditional desktop Eclipse (they're two completely different products, they're both just under the [Eclipse foundation](https://www.eclipse.org/org/foundation/)). For one, Eclipse Che is a cloud-based workspace management tool and IDE. This means that you are able to access your workspace/code from anywhere at any time in your browser and offers docker images with everything installed so that you will not have to do any configuration for your IDE. On the other hand, traditional Eclipse is an extremely heavyweight IDE. It has been one of the leading Java IDE’s for more than 10+ years, has a diverse set of features and focuses only on the desktop environment. Most of my work for Eclipse Che focused around language server integrations and making sure the predefined stacks were working correctly. In order to make sure the predefined stacks were working I had to learn a lot of docker and understand the requirements that were needed in each docker image. For example, for the Java stack, we'd want to make sure that the image its using has the latest java tooling installed. In terms of language server integrations for Eclipse Che, I specifically worked on and currently maintain the YAML Language Server integration and helped out with the Java Language Server integration.

Right now I currently work on Eclipse Theia. Eclipse Theia is also a cloud ide but differs from Eclipse Che in a few different ways. Eclipse Che is a very heavyweight IDE and built using Java while Eclipse Theia is lighter and built using typescript. Additionally, Eclipse Che is a workspace management + IDE combo whereas Eclipse Theia is only an IDE. Eclipse Theia is based off of Monaco (the editor that powers VSCode) and is currently on track to emulate the VSCode API inside of Eclipse Theia. This means that one day you should be able to run your VSCode extensions in the cloud. In terms of my work, I mostly work on additional Java support by adding features such as the ability to see external Java libraries, configuring your classpath, find implementation of interfaces. More recently, I've been asked to help emulate one of VSCode's endpoints inside of Theia.

Links for the curious:
[1] - https://langserver.org

https://microsoft.github.io/language-server-protocol/
https://github.com/redhat-developer/yaml-language-server
https://github.com/eclipse/che
https://github.com/theia-ide/theia