Software Freedom Day

    Today is a special day for all fans of Richard Stallman's ideas. Since 1983, this man has been the main ideologist of the free software movement. And today marks the jubilee, tenth annual day of this same freedom.

    Despite the fact that the criteria for free software look rather wild under the conditions of widespread capitalism, this did not prevent the emergence and successful development of such well-known projects as GNU / Linux, the Apache web server and the MediaWiki engine running Wikipedia. And this is only a small part, but in general, programs that are distributed as free are just a myriad. I myself in the past was an ardent supporter of open source software, in particular, it all started with Mandrake Linux, and ended with Arch Linux and rampant dopilivanie configs taylovogo window manager Awesome. At that time, he even converted some of his friends to this religion and put Linux on laptops to his parents. Now the rage has subsided, and I feel comfortable sitting behind a fresh version of Ubuntu. :)

    The free software movement has become a unique phenomenon. It brings together a multitude of programmers around the world who daily create and improve community-created applications. Hone to perfection and give new opportunities. And thanks to their work, initiative and disinterested approach, today we have many applications that work no worse, and often better, than their commercial closed counterparts. And their capabilities often surpass them.

    We at Mail.Ru Group also have many programmers involved in the creation and improvement of free software. Just in the last post on our blog, Alexander Emelin toldabout his open source Centrifuge project. Specially for the holiday, we asked to tell other employees about how STR helps them in their work, and about some of their work, so the word is to the authors.

    Vladimir Dubrovin (@ z3apa3a), head of the Mail.Ru Mail testing group:

    I have been working with open source software, open source software and open source software all my life, therefore, “helped in work” does not fit the situation, I can say that I live in it . I myself am developing a 3proxy cross-platform proxy project- This is a proxy server that allows you to manage application traffic, that is, take into account, limit, filter, redirect traffic according to various criteria and application protocols. It is included in the ports of FreeBSD, NetBSD, Fedora, Gentoo, AltLinux. For a long time I committed to the FreeRADIUS project, I did source code audits and separate patches for Postfix, Sendmail, Courier-IMAP and some other well-known projects.

    Artyom Vybornov (@vibornoff), Leading Programmer, Pushkin Studio:

    I use open source software every day. Yes, in general, all of our infrastructure in open source software is spinning, how would it be without it? And from the projects I have asmCrypto- cryptography for browsers, it works many times faster than similar libraries, there are already large implementations, if a little refined, the implementation of the W3C Web Crypto API standard will turn out.

    Eduard Iskandarov (@toidi), anti-spam group programmer:

    Open-source is our everything. We use open source software in many places in our system. Starting with data processing and visualization systems, ending with specific libraries. I myself am maliciousa supporter of the idea of ​​global cooperation, where successful ideas and implementations can be widely disseminated due to the utility for society, and not obsessive marketing. On the other hand, software projects developed under the auspices of open-source are very tenacious, which is undoubtedly a huge plus for both the community and business. If the project is really interesting, a community arises around it, in which, if necessary, new leaders may appear or the project can “budge” to test or develop new ideas, which is also good.

    It is very important that open-source imposes small restrictions on the ability to use code. Starting to use the achievements of open-source, you already become part of the community and make a potential contribution. But, another thing is when you become an active participant. Moreover, it is not necessary to spend a lot of time and personal time developing your project, you can start by simply starting tickets for the shortcomings of the projects that you encounter.

    If the work requires it, you can try to figure out the source code yourself, and then send the work to the project. People will be grateful to you, and programming skills have been pumped. In addition, it is worth noting that employers are starting to ask for profiles on popular source code hosting services, and having a solid profile can make a choice in your favor. Or maybe you are organizing a business around an open-source project. By the way, there is a huge field for action. Have a good pool of requests.

    Dmitry Korobkin (@Octane), project programmer Answers:

    I am a JavaScript programmer, so I use the npm package manager almost daily, which contains many open-source modules. We can say that open-source software helps me work every day. I collect projects using Grunt , use UglifyJS to minify js files, write styles on Stylus in conjunction with nib . In addition to the above, the current project I'm working on at Mail.Ru Group is based on the following open-source solutions: Backbone , jQuery , Lo-Dash , LMD , Fest , FileAPI , etc.

    My open- box is also in the npm-piggy bank. source es6-promises module - polyfile for Promise constructorfrom the ECMAScript 6 standard. Unlike other similar polyphiles, mine implements only standard methods, there are no Promise.cast or Promise.any, therefore, when all browsers introduce Promise support, the polyphile can be safely removed, you won’t have to rewrite its code. Polyfil can work both in the browser and as a Node.js module. Asynchrony is achieved using setImmediate .

    Leander Khaliullov (@khaliullov), antispam group programmer:

    You can talk about the use of open source software for a long time, the simplest thing is that, for example, I used Perl in many projects - open-source, and was ported to different platforms. Using nginx, httpd Apache will not surprise anyone either, and in fact many sites work on them. I also use different open-source frameworks both on front-end and back-end. In general, it is inconceivable how difficult it would be to live without free software! Of course, I tried to help some projects myself, but not so that I became a committer, rather, to patch some patch / feature: udpxy, Icecast, Asuswrt RT-N56U, etc., little by little everywhere. I don’t have my own open source projects, so I didn’t attach much importance to this pair of modules for perlachka, but I understand more and more how important it is and I will try to follow the principles of open source software.

    The last thing that muddied up was the management of EnerGenie EG-PMS-LAN from the device :: Gembird . If everyone will try to make a small contribution to what he is interested in, then these projects will develop faster.

    Nikolay Timchenko (@nickynick), programmer of mobile applications My.Com:

    I am developing for iOS. We can say that a few years ago, the open-source culture in this community, as such, was absent. Of course, there were some significant projects, but there were not even sensible mechanisms for including third-party code in their projects - many developers stupidly copied the source code and were content with it. But then the dependency manager a la RubyGems / npm appeared, plus developers from other platforms, accustomed to the normal state of affairs, gradually crawled and turned around.

    In my projects I use a fairly large amount of open-source code, but it is important to understand that each next connected library is a partial loss of control over the project. Really indispensable are things related to specific functions, for example, the well-known ffmpeg or the local GPUImage (a library for high-performance image processing). There is also a local Rx reincarnation, ReactiveCocoa, which allows you to elegantly unravel very unpleasant pieces of UI code related to states and reactions to various user actions.

    In one volume or another, I have contributed to a fairly large number of projects, but there are two popular projects in which I participate. This is Masonry , a convenient wrapper over AutoLayout (a mechanism for positioning views on the screen), andMantle is a lightweight model framework aimed at making life easier and reducing the number of boilerplate code. Recently I released a couple of my own projects, which in the near future I hope to bring to the state of production-ready and advertise . For example, ArrayDiff is a small gizmo that efficiently calculates the difference between two arrays in the form of inserts, deletions, and updates.

    Marat Radchenko (@slonopotamus), lead programmer at Allods Team:

    At work, the following situation arose: programmers want Git, designers and artists just want to commit. We tried to live on Git for several months - it doesn’t work. Constant problems with merge, making working copy in a strange state, a lot of negativity and the pleas “return us SVN”. Googling showed that there is a fast- moving SubGit project , there is still an abandoned (and fiercely slowing down on python) git_svn_server and support for the svn protocol on github , which they give only as part of GitHub Enterprise for a lot of money.

    Scratched turnip, the men said, "and Hu that, we're programmers." And git-as-svn was born, front end to git repository pretending to be svn. Features: checkout / update, log, blame, commit (!), Rename detection, svn: eol-style, git hooks, authentication via LDAP, partial checkout, sparse working copy (svn --depth / - set-depth) , git submodules. By benchmarks, we compare (and sometimes even overtake) the native svn. In the process, they discovered an unimaginable extravaganza in svn, which deserves a separate post.

    PS Yes, it is written in Java, the same one that with an unpredictable GC and loves to eat RAM. Of course, it would be better if we had a bite, but hell, then we would have done all this for a month.

    Andrey Kutuzov (@dystheist), Mail.Ru Search linguist:

    Whenever possible, I try to always use free software. This is, firstly, in my opinion, ethically correct, and, secondly, more often than not convenient, faster and more flexible than proprietary.

    Our group of applied search linguistics Mail.Ru uses free software in almost all tasks. For example, we really needed a quality utility for analyzing and parsing web pages equipped with semantic markup (RDF, microdata, etc.). This is necessary in order to then use this data to form search snippets and other important things. Our choice fell on any23 free librarybeing developed by the Apache Software Foundation and, of course, by the community. We did not regret it at all: any23 was perfectly integrated into our workflow. We understood the logic of her work, and in cases when she did something wrong, it was not a problem to slightly correct her code. Now, with her help, millions of documents are regularly processed, and search users receive beautiful and informative snippets.

    I myself do not consider myself a professional programmer, but if sometimes I write something that may be useful to others, I always post it under free licenses. From the last completed projects, we can recall the automatic resolution system of anaphora in Russian-language texts. Anaphora is a linguistic phenomenon when a word (usually a pronoun) does not matter in itself, but is only a pointer to another word. For example, in the phrase “Dinosaur walked along the street. Petya saw him and turned pale ”, the word“ him ”indicates a dinosaur. Defining such relationships is important for many linguistic tasks. Max Ionov and I built a system that with good accuracy distinguishes anaphoric connections in an arbitrary text in Russian. Presented the project at the conference on computer linguistics "Dialogue", made some improvements andposted on github. Now, as far as we know, this is the only freely available detector of anaphoric connections for the Russian language. You can try it here . We will be very glad to comments and commits. :)

    Artem Drozdov (@Artyomcool), head of the development group of the Mail.Ru Agent for Android:

    It is very difficult to call a “case”. We have all the most critical places in the project tied to open source libraries. And, in general, Android is. He is open-minded a little less than completely, and this is often at hand. Here is an incomplete list of open source projects used in the work:

    LibPhoneNumber is a Google library that provides a bunch of opportunities for working with phone numbers, parse a user’s phone number from a discharge, extract a country / city code, etc.

    GreenDao - ORM for android based on code generation. A bit clumsy, but it works much faster than all ORMLite there. The developers are somewhat weird. When the fork was made, they basically did not accept pool requests. Now they accept, but subject to sending them a scanned signed agreement. In their version, code generation is started by hand, which is again a bit strange when the century of assembly systems is in the yard. I forked from a fork that supports gradle-plugin-level assembly, which allows me to generate the appropriate code automatically during assembly. I saw an automatic upgrade for most cases of changing the database schema, I added the ability to save / load data with custom serializers (which allows Kryo to be used to save / load serialized data as quickly as possible),

    GSON - there is basically nothing to explain here, one of the most used libraries for working with JSON. It is well optimized in terms of garbage collection, which allows us to recommend it for use in mobile phones, where this is always a problem.

    Kryo is the fastest library for serializing / deserializing arbitrary objects. Very comfortable.

    Guava - also, in general, there is nothing to explain, a bunch of utilities, a lot of things that are simply not enough in standard Java.

    Gson-XML is a bit of a controversial library, but it allows you to quickly (in terms of development time) populate GSON for XML deserialization.

    AndroidAnnotations is just something. A library based on code generation, which allows you to get rid of a large number of absolutely nothing doing code that is so characteristic of Java, and especially Android, and focus on, in fact, work. It simplifies the creation and support of an adequate architecture of large Android applications, including by providing dependency-injection. It makes it easy to work with the UI, especially creating your own components. In general, living on an Android without AndroidAnnotations is very difficult.

    Each of them helps a lot. Especially AndroidAnnotations, so I comparatively often make pull requests to this project.

    Pavel Cherenkov (@pcherenkov), system programmer of My World:

    Life example: in 2001, Red Hat 7.3 helped me. There was a crisis, and I was unemployed. I had an old, low-power computer and had absolutely no money for a new one. I installed Red Hat and got a quite capable environment for finding work on the Internet, writing resumes, mailing and programming in POSIX-compatible systems, which I then decided to professionally reorient myself to.

    There is a small open-source project within the framework of GPLv3, (quite widely) known among IPTV enthusiasts: udpxy- proxy server of multicast streams. The project started in 2008 as a utility for Asus Wl-500g routers, the application was included in the open firmware “from Oleg”. Currently, udpxy is standardly included in various firmware of “home” wifi routers, used by IPTV users and providers, and the server side of many IPTV OTT solutions is based on it. The application was adapted (by community forces, in separate branches) to work on almost all modern OS (and hardware platforms) that support the POSIX API for working with the network.

    Arseny Zhizhelev (@primetalk), Senior Programmer, Allods Team:

    What does software freedom mean to me?

    The ability to use an unlimited set of professional software from various fields for free. Despite the fact that for my main activity I am ready to buy software (OS, accounting software, antiviruses), sometimes tasks arise from related areas. And to solve them, I would like to use full-fledged professional software, and buying is unprofitable.

    The right to use in any way, arbitrary reconfiguration. For the purposes of system administration, there is a need to configure several isolated containers with a different set of programs. In the case of free software (Ubuntu), this feature is available. And what to do with proprietary software? Did the owner of exclusive rights allow this use? Did he foresee it at all?

    Clear and standardized licensing agreements. Lack of obligation to sell the soul to the devil in licensing agreements. Modern open source software is usually accompanied by one of the standard licenses. You can study these licenses once, understand how they differ, and almost never return to this issue. In the case of proprietary software, owners each time invent a new license containing their pitfalls. There are cases when clauses were deliberately introduced into licensing agreements with which a sane person would never agree.

    Lack of artificial restrictions designed for entry-level users. A version of the product is released that technically has developed capabilities, and certain uses are prohibited in the license. Here, in general, you can accidentally cross the border of the permissible and use the software in an unauthorized way. For open source software, at the same time, there are only technical limitations. If you managed to overcome these technical limitations, then you can safely use it.

    Independence from the arbitrariness of the vendor. For example, Jabber, unlike Skype, is not prone to a sudden abandonment of support for older versions.

    Lack of embedded unproductive code. The same Skype contains a code that directly delivers ads to users. Why do I need advertising?

    The ability to use the latest or more stable version of the software. Ubuntu is constantly updating, every six months a new version is released. Nothing prevents the upgrade to a new version at any convenient time, and all programs are consistently updated to compatible versions. In the case of proprietary software, updating each program is often costly and thereby limits the ability to use the latest compatible versions.

    To publish my program as an open source software, I see the following motivation options:

    The desire to share interesting and useful findings. For example, when working on a project, a library could be developed whose utility is beyond the scope of the project. I wish intellectual work was not wasted. In particular, the librarySynapseGrid is published based on just such a motivation. In the Speech Portal project, a rather universal library of Functional reactive programming was developed, which allows constructing a strongly typed graph from simple functions. Obviously, such a library could be useful in other projects. In addition, using the library with other commands allows you to detect bugs or modify the API.

    The desire to attract a wide audience to their vision of the problem and how to solve it, and then monetize the audience in any way - either by selling services, or by selling secondary products (plugins), or by selling a “professional” version of the software.

    The desire to improve the software that you use yourself. Patch proposal to developers of open source software, bug reporting, participation in discussions.

    In my opinion, free software will continue to coexist in parallel with proprietary, as The interests of users and developers are combined in different ways in these models. With an increase in the level of abstraction available to developers, the complexity and functionality of the free software being created increases, which allows free software to compete with proprietary software.

    Alexei Kozhevnikov (@ blackm00n), My.Com mobile application programmer:

    I write under iOS, and projects occupy an important place in the life of any mobile open source software developer. For example, in my current project, almost 20 ACT dependencies are used. If we take a typical mobile client-server application, the situation will look something like this.

    Is authorization using a phone number? If so, then you can and should use libPhoneNumber-iOS to format and validate the entered phone numbers. Mantle will help facilitate the conversion of JSON to persistent model entities . It is hard to imagine any project using CoreData without the mogenerator utility . Masonry will make it easy to use AutoLayout in code. If the client communicates with the server using the WebSocket protocol, then for sure there will be a dependency on SocketRocket . Well, and, of course, cocoapods , also an open source software utility, will most likely be used to manage these dependencies . In general, in the mobile development of open source software, open source software and open source software drives.

    As for my projects, the decrease in popularity is in order:
    QTree-objc is a library for stable clustering of geo-data using the Quadtree algorithm. In simple language: if the user needs to show a large number of points on the map (ATMs, shops, etc.), then displaying them all at once will not be the best solution. It would be better to group closely spaced points in a cluster on which, for example, the number of elements will be written. When the map is zoomed, clusters will break up into elements. This library helps to implement this behavior.
    AKNumericFormatter - for formatting numeric data, including and on the fly.
    AKTransliteration - for transliterating text according to table rules, now there are ru <-> en rules.

    So, congratulations to all the programmers who make their contribution to the development of free software! Your work gave birth to many wonderful products, made the IT world more diverse, interesting and closer to people. Thanks!

    How do you relate to free software?

    Also popular now: