
For the past two years, our company has been developing open source projects. In May 2011, our GitHub account was registered. We already wrote about some of the products placed there under free licenses, but that was a long time ago - the available publications are dated all the same in 2011. Since then, we have implemented and laid out in free access many interesting and useful projects (the total number of repositories we have created is about three dozen), and some of them should be described in more detail.
Why open source?
At first glance, commercial companies and OpenSource seem completely incompatible things. Most commercial products are closed source and distributed exclusively for a fee.
')
However, in the last 10–15 years, the following trend has become apparent: open-source developments are actively used in commercial projects. And practice shows that the quality, for example, of some free libraries is not worse, and in some cases even better than the quality of similar commercial products. In addition, many open source products have a wider range of functions than commercial counterparts.
Starting a conversation about OpenSource should clarify the difference between the concepts of “free software”, “free software” and “open software”. Although all three types of software listed above have common features, there are some significant differences between them. Open source software is not synonymous with freeware: there are quite a few open source programs that are distributed, however, on commercial terms (for example, commercial Linux systems). In turn, there are many programs that are distributed completely free of charge, but their source code is closed. For free programs, restrictions on copying and distribution may also be set; their source code is often closed.
Free or open source software in the strict sense is distributed with open source code under the so-called free licenses, implying that it can be distributed, copied and subjected to changes (change means software code modification). Freedom of licenses, however, is not synonymous with anarchy. Accepting a free license imposes some responsibilities on the user. Some licenses, for example, involve the mandatory publication of the source code after any changes are made. There are also licenses that are purely non-commercial in nature: when using at least one library published under such a license, you must open the code for the entire product.
Free software is not always completely free; There are various options for the monetization of open-source projects. For example, a scheme known as donateware is quite popular: users can support developers by feasible voluntary donations. Some programs are released free of charge, but they also have a paid version, for which special support and additional guarantees are provided. There are also products that are distributed free of charge, but you have to pay for their technical support.
The tacit rule of the OpenSource community suggests that you need not only to take, but also to give something in return: take advantage of the product - try to improve it. Free software is being developed thanks to the fact that millions of users (both amateurs and professionals) complement and improve the products with which they work. One of the motives that prompted us to open our own products on GitHub was the desire to improve the free libraries we use and share our work with colleagues. But this motive was not the only one.
In the open source community (as in any network community that brings together people with similar interests), all participants in one way or another follow each other's developments. Authors of interesting decisions can get fame in professional circles. And for commercial companies, participation in open-source projects provides a good opportunity to increase their own awareness. Thanks to GitHub, we have a number of clients; we actively use corrections and improvements made to our products by users in our work. Placing our own projects on GitHub, we share knowledge with a wide user audience, popularize our approaches and ideas. Thus, in a certain sense, Open Source is also a means of promotion for us.
We initially implemented projects that we place for free access to solve our own problems. At the same time, these projects have great potential that could be claimed by many users - that is why we offer them to a wide audience. We publish our own developments exclusively free of charge.
Pyte
The first project we posted on GitHub. We use it to show virtual machine consoles in the cloud. It all started with a small
samfoo / vt102 library , which was later rewritten in its entirety. A detailed
article about this project was published two years ago.
Pyte repository on githubPyxs
A Python-written client for working with XenStore, a repository used to exchange information between Xen domains. It has a more convenient (compared to libxs) interface, as well as a multi-threaded event subscription. A brief but informative
article about Pyxs has already been published.
Pyxs repository on githubSupload
A utility on Bash for uploading files to our cloud storage using the OpenStack Swift API. To work requires a minimum of dependencies and third-party programs. With its help, you can upload files to the repository, recursively upload files in a specified folder and subfolders, upload new files, configure auto-delete files. The utility is also used to organize
backup in storage.
Supload repository on githubTempo
Library for parsing and formatting time on Erlang. Initially, it was developed for our monitoring service in order to implement the time conversion operation from the internal structures of Erlang to strings.
Tempo repository on githubAlberto
In Erlang, there is a “ports” mechanism designed for interaction between an Erlang program and any other program through stdin / stdout with message passing in the specified format. Alberto is a library for creating such “ports” written in OCaml.
Alberto repository on githubPat
We were looking for a stable library on Erlang that supports the SMTP protocol - and we didn’t find anything suitable. There is, of course, gen_smtp, which, unfortunately, does not differ in stability. Therefore, we thought about our own decision.
Pat repository on githubHen
The Haskell library, which implements the Xen hypervisor interface, works with both the third and fourth versions.
Hen repository on githubYAML Config
When we started writing the first Haskell programs, we faced the need to configure them. Of the common libraries, the configurator is primarily used for this purpose. It has two significant drawbacks. First, it does not support storing lists of objects. Secondly, there are no libraries in other languages ​​for the file format used by it.
We decided to write our own library by choosing YAML as the format. The advantages of this format include the flexibility and simplicity of syntax, as well as support for all common programming languages.
YAML Config repository on githubPhoto Gallery
CoffeeScript application that allows users of our
cloud storage to view graphic files in the form of photo galleries on both stationary and mobile devices.
An article about this has already been published in our blog. The functionality of the photo gallery is based on the basic capabilities of the storage, and this allows you to customize the client part for various specific needs on your own.
Photo Gallery Repository on GitHubConclusion
In this article, we talked about some of our open-source projects over the past two years. Work in this direction continues; we will tell about its results in the following publications.
We are not talking about all the projects. Interested readers are invited to visit our page on Github - perhaps you will find there something useful for yourself. We will be grateful for all the comments, suggestions and suggestions - they will be necessarily taken into account in future work.
For those who can not comment on posts on Habré, we invite to our
blog .