Distributed Source Control systems in FLOSS communities

Git logoThe final instance of the posts about the different tools used by an open source community is the core and most important part. After all software is usually ran by code. And code is what gives developers the upper hand in using the final liberties of the free software rights. The right to modify it’s code.

So how does people modify it’s code? Well there are some standard tools that allow to keep track of all the modifications of the code. These systems are called differently but you can identify SCM, or DSCM which enable developers to perform ‘commits’ on the code and keep a version of those modifications.

Here is an example, lets assume this story is being modified by 3 developers: john, patric and bob:

When I was little I had a pony.

John comes and add:

When I was little I had a pony, the pony was named katy.

John has created a new version of the story, however the previous version still exist and patric can compare the new version to the old one. The tool used here is called, diff for differential:

Ver #01 – – When I was little I had a pony.

Ver #02 ++ When I was little I had a pony, the pony was named katy.

Patric can see here where has this been modified. He can apply corrections to it by renaming the pony katy to Katy for example, and Bob could eventually see the version 02 to the new 03 version, or 03 to 01 and see how it’s different.

Code in software behave like this except it also take into account the history of the files and folders itself.

A DSCM system will usually have plugins to connect it to the web. This makes it easier for people to see and learn how the version management take place. If you ever been in sourceforge, google code, or any big open source development project you will be able to see this systems.

More to it, the DSCM could be connected with mailing lists and provide email notifications on any change happening on the source tree (what lives in the DSCM system).

Programers more involved with things like Github can be more related with how these source trees work, and how branches, and forks, take place. Github is a service tha provides some kind of social media withing the plain Git vesion control features as well as insert an Issue tracker to it.

Here comes a big difference in development, usually Git projects tend to be more distributed, while other versions of DSCM systems like Subversion, or CVS were monolitical. The difference is simple, while the code resides on your computer as well as on the system everytime you do a checkout, in git the changes are handled in a more distributed fashion as opposed to the earlier systems. This is why Git right now is the premier and favorite control.

However not all projects use git, and for the ones that don’t usually there was a level between been a commiter and being a casual programer doing some ‘hit n run‘ code. Meaning a random patch, but don’t expect to contribute again. These ‘hit n run’ programers usually couldnt submit their patch to the source tree, so a different system was used in that case. The issue tracker.

The issue tracker serves for creating and keep a track of issues, whenever is usability, documentation, testing and yes, programming bugs. A programmer that found a bug and fix it on it’s own, but holds no attachment to the project, will use the Issue tracker to report the bug and also attach a PATCH. This is the bit of code that was modified and is up for the team of developers to integrate it back into the source tree.

In a community there was a criteria to upgrade casual developers to commiters when they scored a certain ammount of succesful patches, and some other protocols were met (like signing a license code agreement) so the project can legally stand about the status of the code.

Commiters usually were required a gpg key to be able to sign their code, and be able to be approved by the DSCM system, otherwise the commit was rejected. This is also a key component of the FLOSS developer. More information could be found on their wiki stating each step of the way on becoming a contributor, but for the most part. The cycle is similar on all projects.


#DevThursday the battle between languages (and editors)

Yesterday was my first #DevThursday in my hometown, and it was pretty good althought a bit amateurish. The big topic of discussion was the old battle of the languages. PHP vs Java and also VIM vs Emacs. Most of the developers were PHP and only one Java developer so the development of course was more on the venue of Development high impact sites an large communities where PHP rise as hugly popular and almost unmatched. Sure there are many development projects around Java but the popullarity of WordPress, Drupal, Joomla, Moodle and other communities working on code builted on PHP. On the enterprise side, Sugar CMS and other enterprises like Facebook basing most of their development on the popular language.

 Some of the arguments was the verbosity of Java, and the way JRE taxes the memory of most architectures and also how complex the language itself is.

PHP practicality to learn and deploy also makes it popular and viable as a business. The reputation Java on the enterprise has is also shun by how sucky the state of the enterprise is in Mexico.

C# and Microsoft was also mentioned including their Silverlight vs HTML5 argument about how Microsoft always seems to rely on the fud and how hard are the other platforms compared to them. At the same time, how most of this development become an issue when you need to debug and hack whatever the microsoft tools generate to them. Sure the tools save you time, but how much can they debug?

 This was the openner to the discusion about the text editors versus IDE and most specifically vim vs emacs. With Emacs being the biggest challenge but also being the most rewarding as a geek. Emacs legacy is one of the most talked about, the shortcut maze to perform almost everything you could imagine is like the wholy grail of the competent developer. While IDEs on the other hand usually confuse people as in developing for a language as devoting to an IDE. Something that shows the rookines about how real man behaves.


Development and new Podcast

So these past weeks I haven’t blog as much. However I have been doing lots of good stuff. First I have got back in talks with the client in south america as well as polished my presentation on drupal for this friday. I have spent the time also on sites like oDesk. ODesk is an outsource/freelancer site to sell your skills throug the web and something very interesting for what could be the future of support tools.Another thing that has happened this week is the launch of my new podcast on HPR. We start with a talk on QtWebkit which is a new development framework to create web desktop app. We dedicate some time to document ourself but not enough and honestly this wasn’t meant to be a show but since we already record it and went back and forth on it we just decided doing that. Some of the interesting comments were talking about the dynamic dashboard and how can these tool help us design interesting desktop apps. In the end there wasn’t a definitive conclusion, actually the end was a bit abrupt since the recording got cut unintentionally during the call.Finally I been really downloading a lot of audiobooks. My favorite so far is Confessions of an Economic Hitman a book by John Perkins which is the interesting story of economist that inflate the economy of a country to get huge loans and burry the countries into debth in the name of progress and pushing forward the US empire.  There is a video on youtube, actually there is a whole array of videos that you can check out there.If you want to chat about that with me, please let me know through the comments and we can set up a chat session since I really want to share my thoughts with other people.So as you can see it was a very productive week and hope this carry on for the next one.