From the early days of Wikidot, it's been a service that relies heavily on free and open source software. This was one of the most important thing that made it so successful. Without free and open source software we wouldn't manage to create and maintain this service so well.
The most important open source we use on our servers is:
- jQuery and YUI JavaScript libraries
- PostgreSQL database
- Lighttpd web server (previously Apache web server was used)
- Memcached for caching to improve performance
- Varnish as a front-end web cache
- Python for many small behind-the-scene tasks
- parts of Zend Framework because they make programming in PHP a bit easier
- Lucene search engine
- BASH for init scripts (so in case an unexpected reboot happens, Wikidot services start automatically) and repeatable and scheduled jobs
- Collectd monitoring software
- ImageMagick for making image thumbnails
- Webkit rendering engine for capturing web sites and generating thumbnails (also for Wikidot themes submitted by our users)
For storing and versioning software we use great Git version control system originally developed by Linus Torvalds — the creator of Linux kernel. This piece of software alone deserves a lot of respect since it changed the way our team works on the code. The most awesome feature of Git is support for powerful branches — in development we use one branch per feature. Code for production and testing server have their own branches. To put a feature to test, we merge the feature branch to the test branch. To make it live, we merge it to the production branch. This workflow made us do A LOT of merging at work. And it's Git that makes it work reliably and totally painlessly.
In addition to those we use open source software in our development process, for example:
- GIMP for bitmap graphics
- Inkscape for vector graphics
- VI improved and Emacs editors
- Firefox as most developer-friendly browser with the best and most complete Firefox extension for webdevelopers — FireBug along with FirePHP
- VirtualBox to run several virtualized operating systems on one machine to test our code
Open source software gives us three main benefits:
- It's free, so we don't need to pay to use it. Also it's cheap to experiment. Take a product, if it doesn't fit us, take another, try, etc. With commercial software, we would need to evaluate the software thoroughly before deciding to buy expensive licenses.
- It's popular mainly because it's free ;-). Many projects and developers use open source applications and eagerly share their experiences. Because of the developer community and culture of sharing it's much, much easier to find information about problems and solutions to them with open source comparing to similar situations with commercial software.
- It's good. Popularity makes authors gather a lot of feedback from users of their software so that they can improve the software really quickly. Also the fact your code is publicly visible makes you write it more elegantly. This means it's easier to maintain and review.
In order to support open source software and contribute back to it, each time we come across a bug or a problem, we communicate it back to the authors giving as much information as they need (this mostly happens on IRC channels). Each time we can fix the bug ourselves, we send a patch. Imagine you come across a bug in commercial software and you simply can't fix it. The original authors are the only people that can do anything about it. We don't want to rely on such tools and solutions.
For us it's clear that open source made Wikidot such a powerful tool. Are you convinced now too?
Photo comes from Flickr
Thanks Gaby, nice to name the giants! Especially since these are low-level giants: The plumbing and serving. The actual wikidot is it's own thing!
And, this being a praise for open source, does that mean that your work on wikidot will be given back to the community soon? It has been a while ago since wikidot.org has been updated…
yay for php and jquery, two of my favorite languages.
when is the wikidot.org going to be updated? id like to try an installation of it :D
I'm logging out to post this, because my name would give away the company I work for.
We started on the current project ten years ago on propriety software; compilers and frameworks,
source code control and various third-party libraries and a real-time kernel.
The third-party libraries have been a disaster; there is just no support available in any real sense. You can
report a bug, but it never seems to get fixed. Likewise the real-time kernel has changed hands three or four times
and support is there some of the time, sometimes it can take months to get an answer, and on the odd occasions
we have asked them for a feature they have quoted us the full development cost plus profit, even though it would
have been a useful feature for them to have in their product. We could have paid £10-20k, but not £100k for less
than six man-months of work.
The source-code control system is still something from the dark-ages. We have many development and maintenance
branches and every feature has to be manually merged file by file, line by line. We're stuck with it, because
there is no way for us to migrate to anything else. If we had started out on open-source we could have migrated
from RCS to Subversion and then to Git or Mercurial. This last year, for one server and twenty clients, they quoted
us £29,000 for support that we almost never use.
Support, in the propriety world, is a myth. You pay over the odds to talk to people who know nothing. You wait for
weeks for them to forward your query to another country, and then receive a reply that either has no bearing on your
problem or just tells you to deal with it.
If you post a question on an open-source package forum you get ten replies:
If you post a similar question about a propriety package, you only get one of the above answers, chosen at random.
Once I worked with some commercial tools as well. Commercial 3rd party library that fetched 10 random articles from the database (this is what was seen from outside) started to work pretty bad. From some hacky reverse-engineering we found out, it fetched ALL records from the database and choose 10 records randomly instead of straight-asking database for 10 random records (more or less SELECT … FROM … WHERE … ORDER BY RANDOM). First, it was quite hacky to reverse-engineer this, second, if it was open-source (or at least source was available to read), someone would find this mistake earlier, and third, one could modify the library to do this right. Also testing (before buying) did not reveal the error, because you mostly do tests in small scale and assume they work "as you would write them", which is not correct most of the cases ;-).
Piotr Gabryjeluk
visit my blog