Selectel and Open-Source Software

open-source-21

Our company has been working on open-source projects for over five years now. We registered on GitHub in May 2011 and have already published around 30 repositories. Even though we’ve mentioned some of our projects in older posts, we’d like to take today to review a few of these.

Why Open Source?

At first glance, commercial organizations and open source don’t seem to go hand in hand. Most commercial products are closed source and distributed exclusively for pay.

However, we’ve witnessed a new trend emerge over the past 10-15 years: commercial projects built on open-source software. Experience has shown us that the quality of some open-distribution libraries are no worse, and in some cases even better, than similar commercial products. Additionally, a lot of open-source products have more functions compared to their commercial equivalents.

As we start our discussion on open source, we should clarify what exactly freeware, open-source software, and source-available software are. Even though these three kinds of software share some characteristics, there are a number of differences. Source-available, or shared source, software is not a synonym for freeware; there are a lot of programs with an open source code, but which are distributed commercially (such as commercial Linux systems). In turn, there are a lot of programs which are distributed absolutely for free, but their source code is closed. It’s also possible that a limit may be set on the number of times a free program is copied or distributed, and that source code is often closed.

Open-source software is strictly distributed with an open source code under a free license, meaning it can be distributed, copied, and changed (meaning modifications can be made to the software code). Free license, however, doesn’t mean anarchy. By accepting the terms and conditions of a free license, the user is subject to several obligations. Some licenses, for example, require that the source code be published any time changes are made. There are also licenses which are purely non-commercial in nature: when using even one library published under such license, the code for the whole product must be given.

Open-source software is certainly not always distributed for free; there are various ways to monetize open-source projects. For example, a very popular method is known as donationware: users can support developers via donations. Some programs are released for free, but are released alongside a paid version, which offers special support and additional guarantees. There are also products that are distributed for free, but whose tech support needs to be paid for.

An unwritten law in the open source community is that you shouldn’t just take, but also contribute: by using a product, you should try to make it better. Open-source software is developed so that millions of users (both amateurs and professionals alike) can contribute to and improve the products they use. In fact, our desire to improve the free distribution libraries that we use and to share our work was one of the main motivations for releasing our own products on GitHub. This, however, was certainly not the only reason.

In the open-source developer community (like in any online network that connects people by a common interest), participants follow one another to some extent; authors of interesting solutions can even gain notoriety in professional circles.

Even commercial organizations can gain additional recognition by participating in open-source projects. Thanks to GitHub, we’ve gained quite a few clients and we actively use the improvements and corrections that users have made to our products.

By putting our own projects on GitHub, we’re sharing our knowledge with a large user-base that uses our approaches and ideas. This is how open source in some sense promotes progress.

The projects we make freely available were first developed to perform our own tasks. These projects have a lot of potential and may be relevant to a lot of users, which is why we’re making them available to such a wide audience. We publish our own developments exclusively for free.

Pyte

The first project we uploaded to GitHub. We use this program to display virtual machine consoles in the cloud. This all started with a small library, samfoo/vt102, which ended up being entirely rewritten.

Pyte Repository on GitHub

Pyxs

A XenStore client written in Python. It’s a storage space used for exchanging information between Xen domains. It has a user-friendly interface (compared to libxs) and multi-threaded event signatures.

Pyxs Repository on GitHub

Supload

A bash utility for uploading files to our cloud storage using OpenStack Swift API. The utility requires little dependencies or third-party software. Supload can be used to upload files to storage, perform recursive uploads to a specific folder or subfolders, upload new files, and set up automatic file deletion. The utility can also be used for making backups to storage.

Supload Repository on GitHub

Tempo

A library for parsing and formatting time in Erlang. It was initially developed for our monitoring service to perform an operation to convert time from Erlang’s internal structures to lines.

Tempo Repository on GitHub

Alberto

Erlang has a built-in ports mechanism for interactions between programs in Erlang and any other program over stdin/stdout by transferring messages in a set format. Alberto is a library for creating these ports written in OCaml.

Alberto Repository on GitHub

Pat

We looked for a stable Erlang library that supports SMTP, but didn’t find anything. Of course there’s gen_smtp, but unfortunately, it’s fairly unstable. This is what led us to make our own solution.

Pat Repository on GitHub

Hen

A Haskell library that creates an interface for the Xen hypervisor. It works with both versions 3 and 4.

Hen Repository on GitHub

YAML Config

When we started to write our first programs in Haskell, we obviously had to configure them. The most common library for this purpose is configurator, which has two big drawbacks. Firstly, you cannot save object list. Secondly, there are no libraries written in other languages for using its file format.

We decided to write our own library in YAML. This format is flexible, has a simple syntax, and also supports the most common programming languages.

YAML Config Repository on GitHub

Photo Gallery

An application in CoffeeScript allowing our Cloud Storage users to view graphics as a photo gallery on desktop or mobile devices. The functions of the photo gallery are based on cloud storage’s basic capabilities, which lets the client side update itself to meet various needs.

Photo Gallery Repository on GitHub

Conclusion

In this article, we looked at some of the open-source projects that we’ve developed over the past five years. We’ll continue working in this field and will be sure to keep you up to date in future publications.

This list is far from complete. If any readers are interested, you’re welcome to visit our site on GitHub; you might find something of use. We’d be happy to hear your comments and suggestions.