Search Results: "ag"

2 April 2010

Debian News: Brief Updates: DPL, ftp-master down, release update and April Fools

Thomas Koch: Design document for a patch management system on a DVCS

Dear friends of Debian,

this is my first post to Planet Debian. - The planet with the most geeky registration procedure in the known universe!

I proposed an alternative to topgit some days ago on the vcs-pkg.org list. Martin asked (and encouraged) me to give a better explanation of the idea, which I'll hereby try. Sorry for not giving any drawings, but I'm totally incapable of anything graphical.

Hopefully, I'll manage to come to the Debian Miniconf in Berlin. Then we could discuss the idea further and maybe even start implementing it. (Somebody would need to help me with my first steps in Perl then...)

The following text is available on github. Please help me expand it!

Design document for a patch management system on a DVCS
Requirements The system to implement manages patchsets. A patchset is a set of patches with a tree-ish dependency graph between the patches. There's one distinct root of this dependency graph. Patches are managed as branches with each branch representing a patch. Modification of a patch is done by a commit to the respective branch. A branch representing a patch as part of a patchset is called patchbranch. The patch of a patchbranch is created as the diff between the root of the patchbranch and the head. The most important management methods are:
  • Export a patchset in different formats
    • quilt
    • a merged commit of all patches
    • a line of commits with each commit representing one patch
  • Update a patchset against an updated root.
  • Copy a patchset
  • Delete a patchset from direct visibility while preserving all history about it
  • Hide and unhide a patchset from direct visibility
Additional requirements:
  • The system should be implementable on top of GIT, Mercurial and eventually Bazaar.
  • The system must easily cope with multiple different and independent patchsets.
  • All information about a patchset must be encoded in one distinct branch. Publishing this one branch must be sufficient to allow somebody else to recreate the patchset with all of its patchbranches.
  • The system should not rely on the presence of hooks.
  • The system should not require the addition of management files in patch branches (like .topmsg and .topdeps in topgit)
  • The system must be easy to understand for a regular user of the underlying DVCS.
  • The implementation may allow a patchset to depend on another patchset(s).

implementation
patchset meta branch A patchset meta branch holds all informations about one patchset. First, it holds references to the top commits of all patch branches in the form of parent references of commits. Thus pushing the patchset meta branch automatically also pushes all commits of all patch branches. Secondly, the patchset meta branch contains meta informations about the patchset. These meta informations are:
  • The names of all patch branches together with the most recent commit identifier of a particular patch branch. Let's save this information in a file called branches.
  • A message for each patch branch that explains the patch. These messages can be saved in the file tree as msg/$ PATCH-BRANCH-NAME
  • References to the dependencies of the patch (other patches of the same patchset or the root of the patchset). This is also encoded in the file branches.
Since the patchset meta branch holds all this informations, it is possible, to delete all patch branches and recreate them from this informations. Although the commits of the patchset meta branches hold references to the patch branches, its file tree does not need to contain any files from the referenced patches. This may confuse the underlying DVCS, but the patch meta branch is not ment to be directly inspected.

The branches file A branches file for a fictive patchset could look like:
# patch branches without an explicit dependency depend on the root of the
# patchset tree
# A Root can be given as either a fix commit (seen here), a branch or a tag.
# A fixed commit or tag is useful to maintain a patchset against an older
# upstream version
ROOT: 6a8589de32d490806ab86432a3181370e65953ca
# A tag as a dependency
#ROOT: upstream/0.1.2
# A branch as a dependency
#ROOT: upstream
# A regular patch with it's name and last commit
BRANCH: debian/use-debian-jars-in-build-xml 4bab542c261ff1a1ae87151c3536f19ef02d7937
# two other regular patches
BRANCH: upstream-jira/HDFS-1234 a8e4af13106582ca1bfbbcaeb0537f73faf46d87
BRANCH: upstream-jira/MAP-REDUCE-007 e3426bcbcb2537478f851edcf6eb04b34f6c7106
# This patch depends on the above two patches
# The sha1 below the dependency patches references a merge commit of the two
# dependencies
BRANCH: upstream-jira/HDFS-008 517851aa829d77e09bc5e59985fed1b0aa339cc6
DEPENDENCIES:
  upstream-jira/HDFS-1234
  upstream-jira/MAP-REDUCE-007
    cc294f2e4773c4ff71efb83648a0e16835fca841
# A patch branch that belongs to the patch branch, but won't get exported (yet)
BRANCH: upstream-jira/HDFS-9999 74257905azgsa4689bc5e59985fed1b0aa339cc6
BRANCH-FLAGS: noexport



Christian Perrier: This is this day of the year...

...where I get paged, SMS'ed, /msg'ed, facebooked, cheek kissed and non-cheek kissed (once), as well as piweted (but that's specific to $ family ). Ah, and I have to bring croissants at work this morning. Tradition. Eh. In short, I'm turning 31 today. Easy one....this year..:-)

1 April 2010

Asheesh Laroia: Cosmetic Carbon Copy on Slashdot

Two months ago, I explained how cosmetic carbon copy could allow you to list recipients in a message who never receive a copy. Today, thanks to John Stumpo's writing talent and Wes Filardo's IETF-NG, an Internet-Draft informational document has been published. IETF didn't like it enough to accept it as an April 1 RFC. (I do actually hope that one day someone will submit a modified version to IETF as a rest-of-the-year RFC.) Slashdot took note! In first visible comment, an Anonymous Coward writes:
Although it is an April Fool's...this would actually be useful.
Other highlights from the Slashdot discussion:

Jo Shields: Introducing Larval Editor

In my last post, about GRUB2 theming, there were a few people who were unhappy at the perceived difficulty of creating GRUB2 themes, largely based on the lack of documentation. And to be honest, those people are right if the documentation were complete & correct when I started, then I wouldn t have ended up bumping into all the bugs I did. So, to help on that front and to help kick-start GRUB2 theming in general, I m announcing Larval. More GRUB2 themes means more awesome-looking systems in the wild. Hopefully the GRUB2 upstream will embrace it as a project to help raise the profile and potential of GRUB2. It didn t take me long to realise the most obvious way to develop such an editor: GRUB2 s canvas-based layout system has an awful lot in common with XAML, so the obvious choice was to develop using Silverlight (or, more specifically, Gtk.Moonlight). Larval s internal theme format is XAML files, which are then exported to (and imported from) GRUB2 s simple text based files. The biggest piece of work, to be honest, is the Managed implementation of a PF2 font reader/writer, so you can design a theme using the regular TrueType fonts of your choice, then have them automatically ported to PF2 format as required. I look forward to plenty of community input on Larval, once it reaches a point where I m sufficiently pleased with my (Ms-PL licensed) code to share it with the world. Until then, you ll have to make do with the above screenshot!

Alexander Reichle-Schmehl: Let's resurrect Debian Weekly News -- again

No, my recent mail to debian-devel-announce about resurrecting our newsletter is not an April fool joke. It is serious. As some readers of planet.debian.org might wonder, why we still need such an archaic thing as an newsletter send out via e-mail. Well, yes, we have planet, we have news.debian.net. We have developer news and the normal mails sent to the -devel-announce lists. So why do we still need a newsletter? Well, the answer is easy: To inform people and kind of mark our spot. Believe it or not, but there are still people out there, who don't use all these new Web 2.0 stuff and who prefer to just receive from time to time some news about their favourite project. It's very easy to subscribe to the news mailing list, while there are still people out there, unfamiliar with RSS feeds and the like, and the Project News are available as E-Mail, plain HTML on our website as well as RSS feed. And I do think, that it still covers things, which you might miss otherwise. For example no one can really monitor all our mailing lists and forums. But from time to time, something interesting happens there. So it would be nice to read about it in the Project News, isn't it? Another thing that comes to my mind is localisation. The Project News can be easily translated in various languages. Granted, we don't have a debian-news-language list for all languages, but at least the HTML and the RSS version can be translated. And maybe the e-mail can be send to existing debian-user-language lists instead, if the readers of that list don't get bothered by it... Why not? So, by now I have hopefully convinced you, that the Debian Project News are indeed worth to continue and to survive. And therefore you surely want to know how you can help us ;) Well, contributing is easy. Easiest way is to send us interesting things happening in the wider Debian Universe to the debian-publicity mailing list. Native English speaker may help us by proofreading our en_DE; non native English speakers can translate the Project News. Of course you can also edit your own articles (we also have some style guidelines). Debian Developers can commit their changes directly to our subversion repository. If you are not DD, you just need a account on alioth and can join our project. We already have quite some documentation available on how to contribute. I'm looking forward to read from you on our mailing list... See you there!

Alexander Reichle-Schmehl: lawsuit coming up?

I don't know how Adrian got to know about the Canonical vs. SPI lawsuit; as DPL and press team decided not to make the details public before tomorrow. But rest assured: All involved parties agreed, that it would be in the best interest of all, to settle things out of court.

Andrew Pollock: [life] It's done!

(It's actually been done since last Friday, I just haven't had time to sort out photos and write about it) It's so nice to have our home back to normal. The kitchen is all done, with the exception of being down one handle, and two design bugs that need to be sorted out. Bug number one is that the trim on the warming drawer underneath the oven sticks out a little bit more than the rest of the whole range, meaning if it's pushed all the way in, the cabinet door to the left rubs against it when opened. Solution: accelerate replacement of the range. Bug number two is the drawer to the right of the range can't be opened when the oven door is closed (it runs into the handle). What I think happened is the kitchen designer didn't take into account the thickness of the new back splash behind the range causing it to come out further from the wall. This is disappointing, and replacing the range won't help. They all seem to have oven door handles that protrude that far out. The solution is to modify the width of the drawer on the left-hand side. Other than those two issues, the kitchen is fantastic. We've very happy with it. The amount of counter space we've got is wonderful. Here's some before and after photos, the whole lot are here Before After We just need to sort out some window treatments of some sort now.

31 March 2010

Jordi Mallach: GNOME 2.30

Congratulations to everyone involved in what looks like a very good GNOME release! Interesting times are now ahead for the GNOME project, as on the plate is now a big release like 3.0. That will mean a lot of changes to the desktop we've got used to in the last decade, and I hope it ends up being successful, innovative and useful. Debian has packages for GNOME Shell, and a special gnome3-session which starts Mutter + Shell. I experimented with it last week at my work place, and had mixed feelings with the current status. I'm not a big fan of hard dependencies on Direct Rendering. My main computer is an Athlon 800MHz. Compiz crawls on it, and sadly Mutter is basically unusable on it. At the office, I have P4-based system with 1GB of RAM, which runs GNOME 2.28 OK. When I switched to the GNOME 3 session, it showed that it's getting old. I also experienced X crashes and kernel oopses, apparently a classic for ATI users using a composited window manager. This being said, I consider myself lucky because both systems have ATI cards and can do DRI using free software. If I was forced to use nVidia non-free drivers, it'd probably mean I'd stick with the Panel until that wasn't an option at all. I am aware we'll see improvements both in Xorg/kernel and GNOME before GNOME 3.0 is released next Autumn, and have high hopes for a release that is accepted by our users really fast (avoiding a KDE 4.0 situation). GNOME hackers have done good stuff for ages, and 3.0 will be a new example!

Christoph Egger: Another piece of well done software

As I really liked saying why I think Open Game Art is a good project I decided to start a small serie of well done free (well not only software) projects. This time SFML got to be the one. SFML is, as the name already tells, a Simple and Fast Multimedia Library written in C++ but providing bindings for a whole bunch of other languages like Python, Ruby, C, D and others. Debian currently provides the original library as well as the C and Python bindings maintained by the Games Team and myself. On a side remark, SFML also uses my favourite License, zlib. What I really like about SFML is the readable code all through the project. Every time I was unsure what some function does having a look at the actual implementation (and some OpenGL and X11) knowledge turned out to be quite satisfactory. This is, of course, aided by the fact that SFML's development is driven by a single Developer, Laurent Gomila. On the rather weak points I'm still hoping the to-be-released 2.0 Version of SFML will introduce something like a stable API which it currently lacks (although the API has settled and there are no such huge changes as from 1.2 to 1.3 in recent updates any more). SFML also uses hand-made Makefiles for building (now supporting DESTDIR at least -- in some non-standard way) and has the usual load of embedded libraries which results in it's current load of patches. For a nice time burner make sure you take a look at the python binding's snake-like clone. It clearly misses some important aspects to form a full game but it's nice nontheless. I have a (not-quite) small SFML based Project myself, a forward ported game from my old DirectX days, however it's unfortunately not yet playable again und rather stalled at the moment due to lack of time. So much for SFML. If you feel like it feel free to join me on writing about well done pieces of software or just about pieces on how you think it should be done and tell us where you found it happening.

Erich Schubert: ELKI 0.3 released

ELKI: Environment for DeveLoping KDD-Applications Supported by Index-Structureshas been a major part of my research the last one and a half year. In a few words, it's a Java environment for research on data mining algorithms.In reality, it's a huge piece of software, providing various data types, parsers, distance functions (including specialized distance functions for color histograms or time series; 20+ total), index structures and tons of algorithms (with a focus on clustering, correlation clustering, subspace clustering and outlier detection methods; 40+ total). And providing a way to plug all these together in just about any way you can imagine. In fact, some algorithms are implemented just by plugging together other algorithms and distance functions.The 0.3 release adds more than a dozen outlier detection algorithms (the total is somewhere like 16, with some extra ones I didn't get around to clean up for the release branch yet) and a whole set of visualizations and a new convenience GUI for easier parameterization.It's all on the ELKI homepage.If you know what WEKA is, then ELKI is probably also interesting for you. But currently, we do not have much classification in ELKI. If you are into classification, you'll be better of with WEKA. ELKI is aiming to be to Knowledge Discovery in Databases (you know, the unsupervised thing) to what WEKA is to the Machine Learning (you know, the supervised thing) world.If you don't know all these terms, you'll probably need to browse through some literature to get familiar with the concepts and some of the algorithms. ELKI is not (yet?) an application that will just work on whatever data you want to throw at it. RapidMiner is another established application that can help you there better.As for application in commercial use, note that ELKI is designed in a way to be extensible (to help us in research) and clean (to help in teaching; I constantly have some students use ELKI as base for their projects), and it also is a moving target. The next release will likely feature a completely new database layer, to allow us to add our latest index structure research and support online algorithms. Performance and the ability to scale to arbitrary sizes of data is not of high priority to us.So for commercial applications, you might want to implement it on your own, connect it to your favourite DBMS and optimize it how you need it yourself. (When we need to scale, we'll just run it on a 128 GB system, that will take us far enough). Plus, you'll have to talk to us about a license.But: if you are interested in unsupervised data mining, such as clustering and outlier detection, then ELKI might offer you are large library to base your research on, without having to start from scratch with everything.

John Goerzen: It s that time of the decade: I m reinstalling Debian

My main home workstation (previously named katherina, after a distant ancestor) was originally bought a few years ago probably 2002 or 2003. Since then, it s had its motherboard upgraded twice, new hard disks, and then even was moved to a completely new machine back in January. Throughout all of that, it s still running the original sid that I put on it when it was new, dist-upgraded since then, copied to new disks via tar and netcat, but never reinstalled. So it s probably been less than my average of 10 years on a given Debian install. But it s time. For one thing, despite the fact that I was one of the people that helped start Debian s amd64 port (then known as the pure64 effort), I ve been running i386 on my 64-bit workstation. For another, I want to switch from XFS to ext4. And finally, it has not escaped my notice that my laptop running Gnome with xmonad feels a lot faster than the far more powerful desktop running KDE4 with xmonad, plus Gnome integrates better with xmonad. And there are some nice gnome bits installed by default that my KDE system doesn t have, and 400 packages installed on my system that are no longer in any archive. I could, of course, clean that stuff up but all this adds up to enough of an excuse to start from scratch. I continue to be very impressed with the quality of squeeze. This will be a very nice release when it comes out.

Francois Marier: "Abusing" git storage

A git repository is primarily intended to store multiple branches of a single program or component. The underlying system however is much more flexible. Here are two ways to add files which are related to the project but outside the normal history.
Storing a single file all by itselfThis intermediate trick allows you to store a single file into a git repository without the file being in any of the branches.

First of all, let's create a new file:
echo "Hi" > message.txt
and store it in git:
git hash-object -w message.txt
b14df6442ea5a1b382985a6549b85d435376c351
At this stage, the file is stored within the git repository but there is no other way to get to it other than using the hash:
git cat-file blob b14df6442ea5a1b382985a6549b85d435376c351
Hi
A good way to point to the stored contents is to use a tag:
git tag message.txt b14df6442ea5a1b382985a6549b85d435376c351
Now you can access your file this way:
git cat-file blob message.txt
Hi
Creating an empty branchAs seen in this git screencast or in the Git Community Book, you can create a branch without a parent or any initial contents:
git symbolic-ref HEAD refs/heads/foo
rm .git/index
git clean -fdx
To finish it off, add what you were planning on storing there and commit it:
git add myfile
git commit -m 'Initial commit'

30 March 2010

MJ Ray: Enemies of Digital Economy Workers: the TUC

The Trade Union Congress s chief executive recently came out in the crazy position of sharing a platform with the British Phonographic Industry (and why are they still relevant? What is the market share of phonographs now?) and supporting the much-hated Digital Britain guilty-without-trial three strikes disconnect measures. Yes, you read that right: the TUC s chief exec wants digital economy workers to be arbitrarily disconnectable in response to allegations of file-sharing by large competitors. If I m being charitable, I think he was duped. That stupid article was in response to yet another set of filesharing-will-fankle-us scare figures which carefully only included the creative industries most impacted by piracy (see second paragraph of introduction). See pages 12 and 14 of the full report to note that businesses that don t depend on profit from copyright licensing were not even included! So, these are not the creative industries. They are the KEA and WIPO definitions of copyright industries. Of course they are hurt by copyright infringement and have little to lose from over-zealous copyright laws, but they are not the creative industries. I contacted the TUC to basically ask why they were so against digital economy workers in this way. I received an anonymous answer from TUC Information Services that was almost helpful:
The current policy of the TUC on this issue was decided at our annual congress last autumn. and directing me to Composite Motions 18 and 19 (PDF) and the verbatim report of the conference (PDF) pp. 107-9
Composite Motion 18 seems largely innocent. In fact, its call for social inclusion, a Universal Service Obligation and digital inclusion could be seen as an instruction to oppose non-judicial three-strikes, because allowing so-called Kangkaroo courts run by private-sector transnationals to decide who may use the internet is basically incompatible with inclusion and universal service. The NUJ-supported Composite Motion 19 is the dangerous one and I m alarmed that the claims around piracy are completely without evidence or justification in the verbatim report of the conference. Were references supplied, or does the TUC adopt positions based solely on reference-free argument? How does the TUC reconcile contradictory motions for inclusion and universal service and for exclusion through private courts? Their answer?
The TUC does not, as a rule, enter into correspondence with individual union members [...]
Oh great(!) You are in a maze of twisted union organisations and none of the ones which are screwing things up are accountable to you. Thankfully, I have happier Digital Britain news from another source which I should write about soon.

Norbert Tretkowski: MySQL distro meeting in Brussels

Last month I spent two days in Belgium, after I got invited to the MySQL distro meeting. It was a non-public meeting with some people from Sun Microsystems and MySQL maintainers from different Linux distributions. It took place directly after FOSDEM (which I unfortunately could not attend due to personal reasons) at the Sun Microsystems Belgium office in Brussels. It was great to meet with Mathias Gug from the Ubuntu Server team in person. He had some really good ideas on how we could reduce the differences between MySQL in Debian and Ubuntu in the future. As a consequence, Debian will soon switch from Subversion to Bazaar for maintenance of most MySQL packages.

However, we were not only talking about the MySQL Server itself, but also about MySQL Cluster, MySQL Proxy, the MySQL Connectors and the MySQL GUI Tools. Giuseppe Maxia has a more detailed blog entry about the event, including the whole list of participants and some pictures. I fully agree with him: The meeting was a success, we also had a lot of fun, and we should do that more often!

Thanks a lot to Sun Microsystems for sponsoring, and of course to Lenz Grimmer for organizing the event.

David Bremner: Distributed Issue Tracking with Git

I'm thinking about distributed issue tracking systems that play nice with git. I don't care about other version control systems anymore :). I also prefer command line interfaces, because as commentators on the blog have mentioned, I'm a Luddite (in the imprecise, slang sense). So far I have found a few projects, and tried to guess how much of a going concern they are. Git Specific VCS Agnostic Sortof VCS Agnostic

Michal Čihař: FOSDEM todo list for phpMyAdmin completed

On FOSDEM 2010 we agreed on several bigger changes in phpMyAdmin. The two of them were my proposals and I had to take care of them - migration to Git and start to use Gettext based system for translating phpMyAdmin. The migration to Git was quite straightforward and went alive on 11th of March. There were few tiny issues afterwards, but I think everything went quite smoothly and we can happily use it right now (I especially enjoy using feature branches). I've also written little guideline to document best practices to use in our repository After we went to Git, I immediately started on another big transition - the goal is to use standard po files for translations. The obvious solution is to use gettext for that, however the one in PHP is not really in good shape to use, so we went with php-gettext. Today I just merged gettext branch to master so it is also done (see information for developers and translators for more details regarding this). So now these big tasks are done and I can focus on daily issues connected with GSoC and other areas.

Frans Pop: Debianizing an ARM-based netbook

I got this neat little Chinese netbook after a mail to the debian-arm list where one machine was offered in exchange for porting Debian to it. So I offered to get Debian Installer running on it. In total 20 of these ChiTech PC89E netbooks were bought as a group by various people in different countries. The netbook is based on an ARM S3C6410 SoC, has 256 MB RAM and an excellent 8.9" 1024x600 LCD display. The machine itself is 11" and weighs under 800 grams. Most of the weight is the LCD display; they've even had to add a small extra weight in the base to avoid it toppling over backwards. The goal of getting D-I running was achieved last week, though not without needing to overcome some steep hurdles. Base installation Our main problem is that we don't have the source code to either the kernel they use (2.6.24.2 with patches from Samsung and others), or the u-boot bootloader. SSH was available without password for the user account and various basic errors allowed us to root the system relatively quickly. Brute force cracked the root password a few days later. The only information we did have was from the provided desktop system (which is really quite good and certainly looks very polished, but in the end still way too limited), what's on the flash memory and the contents ofa "firmware upgrade" image they provided. Having that firmware upgrade image proved very important as it gave us a good idea how to boot the system from SD card and made it possible to locate the kernel, u-boot bootloader and other files in flash memory. Googling for some boot messages we found two kernel source trees (for a different device: SmartQ) that looked promising as a basis. After some disassembly work by Luke Kenneth Casson Leighton on the kernel to get LCD timings and correct GPIO data we managed to get a basic working kernel: LCD, USB (and thus keyboard and touchpad), and wired networking. Although there are still loads of things that need improving/fixing, that gave me enough to work with to try to get Debian Installer going. The main limitations for running D-I are that we cannot change the bootloader configuration and that their boot procedure does not use an initrd. But we did work out how to boot a custom kernel from an external SD card by making creative use of their "firmware upgrade" procedure. Essentially I needed to find a way to run D-I by only booting a kernel. Piggy-backing an initrd onto a kernel is possible (using the 'bootpImage' target from the upstream kernel build system), but then the size of kernel plus initrd is limited to 4 MB and that is really too limited for a decent D-I initrd (especially if you want full i18n support). I ended up creating a micro-initrd (only 66 kB!) which only function is to mount the external SD card, load the real D-I root initramfs (which now no longer has any real size limitation) and then run init in that. After adding some relatively minor customizations for this netbook (such as installing the kernel from a custom repository on alioth), the installer was up and running. As the framebuffer worked without problem for the newt frontend, I next wondered if it would be possible to also get the graphical installer working. This should be easier for non-x86 systems after the recent switch from DirectFB to X.Org as backend for the graphical installer. And the image below shows it was. I had to create an /etc/xorg.conf to get the USB keyboard and touchpad working (apparently auto-detection does not quite work for less standard hardware), but that was basically it. Language selection So now all we have to do is get all the remaining kernel issues sorted out...

David Welton: Where Tcl and Tk Went Wrong

I've been pondering this subject for a while, and I think I'm finally ready to write about it.
Tcl was, for many years, my go-to language of choice. It's still near and dear to me in many ways, and I even worked on a portion of a book about it ( http://journal.dedasys.com/2009/09/15/tcl-and-the-tk-toolkit-2nd-edition ). However, examining what "went wrong" is quite interesting, if one attempts, as much as possible, a dispassionate, analytical approach that aims to gain knowledge, rather than assign blame or paper over real defects with a rose-colored vision of things. It has made me consider, and learn, about a variety of aspects of the software industry, such as economics and marketing, that I had not previously been interested in. Indeed, my thesis is that Tcl and Tk's problems primarily stem from economic and marketing (human) factors, rather than any serious defects with the technology itself. Before we go further, I want to say that Tcl is not "dying". It is still a very widely used language, with a lot of code in production, and, importantly, a healthy, diverse, and highly talented core team that is dedicated to maintaining and improving the code. That said, since its "heyday" in the late 90ies, it has not ... "thrived", I guess we can say. I would also like to state that "hindsight is 20-20" - it's easy to criticize after the fact, and not nearly so easy to do the right thing in the right moment. This was one reason why I was reticent to write this article. Let me repeat that I am writing it not out of malice or frustration (I went through a "frustrated" phase, but that's in the past), but because at this point I think it's a genuinely interesting "case history" of a the rise and gentle decline of a widely used software system, and that there is a lot to be learned. At the height of its popularity, Tcl was up there with Perl, which was the scripting language in those days. Perl, Tcl, and Python were often mentioned together. Ruby existed, but was virtually unknown outside of Japan. PHP was on the rise, but still hadn't really come into its own. Lua hadn't really carved out a niche for itself yet, either. Tcl is no longer one of the popular languages, these days, so to say it hasn't had problems is to bury one's head in the sand: it has fallen in terms of popularity. To examine what went wrong, we should probably start off with what went right: These features led to Tcl being widely used, from Cisco routers to advanced television graphics generation programs to the AOLserver web server, which was busy serving out large quantities of dynamic web pages when many of us were still fiddling around with comparatively slow and clunky CGI programs in Perl. Note also that there have been a lot of cool things to have gone into Tcl in the mean time. It has a lot of impressive features; many more than most people realize, and has had a lot of them for a while. Check out http://www.tcl.tk to learn more about the "good stuff". But that's not the point of this article... There was a healthy, active community of developers producing lots of interesting add-ons for the language, and working on the language itself. This culminated in its adoption by Sun Microsystems, which hired the language's creator, Dr. John Ousterhout, and a team of people, who added a lot of great features to the language. Quoting from Ousterhout's history of Tcl page:

The additional resources provided by Sun allowed us to make major improvements to Tcl and Tk. Scott Stanton and Ray Johnson ported Tcl and Tk to Windows and the Macintosh, so that Tcl became an outstanding cross-platform development environment; Windows quickly came to be the most common platform. Jacob Levy and Scott Stanton overhauled the I/O system and added socket support, so that Tcl could easily be used for a variety of network applications. Brian Lewis built a bytecode compiler for Tcl scripts, which provided speedups of as much as a factor of 10x. Jacob Levy implemented Safe-Tcl, a powerful security model that allows untrusted scripts to be evaluated safely. Jacob Levy and Laurent Demailly built a Tcl plugin, so that Tcl scripts can be evaluated in a Web browser, and we created Jacl and TclBlend, which allow Tcl and Java to work closely together. We added many other smaller improvements, such as dynamic loading, namespaces, time and date support, binary I/O, additional file manipulation commands, and an improved font mechanism. Unfortunately, after several years, Sun decided that they wanted to promote one and only one language. And that language was Java. So Ousterhout and many people from his team decamped to a startup that Ousterhout founded, called Scriptics, where the Tcl and Tk innovations continued:

In 1998, Scriptics made several patch releases for Tcl 8.0 to fix bugs and add small new features, such as a better support for the [incr Tcl] extension. In April 1999, Scriptics made its first major open source release, Tcl/Tk 8.1. This release added Unicode support (for internationalization), thread safety (for multi-threaded server applications), and an all-new regular expression package by Henry Spencer that included many new features as well as Unicode support.
However, as many a company based around open source was to find later, it's a tough space to be in. Scriptics changed its name to Ajuba, and was eventually sold (at a healthy profit, apparently, making it a relative dot com success story, all in all) to Interwoven, for the "B2B" technology that Ajuba had developed. Interwoven was not interested in Tcl, particularly, so, to create a system for the ongoing development and governance of the language, the "Tcl Core Team" was created. This was something of a blow to Tcl, but certainly not fatal: Perl, Python, Ruby, PHP, Lua have all had some paid corporate support, but it has by no means been constant, or included large teams. At the same time in the late 90ies, open source was really starting to take off in general. Programmers were making all kinds of progress, and had begun to make Linux into what is today the world's most widely used server platform, and laying the groundwork for the KDE and Gnome desktops. While these may still not be widely used, they are for the most part very polished systems, and leaps and bounds better than what passed for the 'Unix desktop' experience in the 90ies. One of the key bits of work that was added to Tk was to make it look pretty good on Microsoft Windows systems. This was in an time when the "enterprisey" folks were turning away from Unix in the form of AIX, Solaris, HPUX, et al. and taking up NT as the platform of choice, so it was in some ways sensible to make Tk work well there, and in any case as a cross platform GUI toolkit, it ought to work well there in any case. And, on the Unix side, Tk emulated the expensive, professional Motif look and feel that serious Unix programmers used. What could go wrong? As Gnome and KDE continued to mature, though, what would become one of Tk's major (in my opinion) marketing blunders took root. I have it on good authority, from someone who was there in the office, that the Scriptics guys working on Tcl and Tk viewed Gnome and KDE (and the Gtk and Qt toolkits) as not really worth their while. To be fair, since Tk has always been under a liberal BSD style license, the Qt toolkit has always been "off limits". Still, though, the attitude was that Tk was a standalone system, and since it ran on pretty much any Unix system, it didn't need to bother with Gnome or KDE. Gradually, though, as more and more people used Gnome and KDE exclusively on Linux, the Tk look and feel began to look more and more antiquated, a relic from the 1990ies when Motif (which has since pretty much disappeared) was king. Tk applications started to really stand out by not looking at all like the rest of the operating system. And, while Linux may not be responsible for a vast portion of the world's desktops, it is widely used by developers, who were turned off by the increasingly creaky look of the Tk applications they saw. Tk is and was actually a fairly flexible system, and it would have been possible to tweak the look and feel to make it look a bit better on Linux, without even doing any major work. Maybe not perfect, but certainly better looking. Nothing happened, though. Another problem was that Tk and Tcl made it so easy to create GUIs that anyone could, and did, despite, in many cases, a complete lack of design skills. You can't particularly blame the tools for how they're used, but there was certainly a cultural problem: if you read most of the early Tcl and Tk books, and even many of the modern ones, there are hundreds of pages dedicated to exactly how to use Tk, but few to none explaining even basic user interface concepts, or even admonitions to the user to seek out that knowledge prior to attempting a serious GUI program. The end result is that a lot of Tk programs, besides just looking "old fashioned" had fairly poor user interfaces because they were made by programmers who did not have a UI/design culture. Contrast that with Gnome and KDE, which have made a point of focusing on how to make a good GUI for their systems, complete with guidelines about how applications should behave. It may have taken them some time to get things right, but they have done a lot to try and instill a culture of creating high quality, well-integrated GUI's that are consistent with the system where they run. Lately, there has been a lot of work to update the Tk look and feel, and it has finally started to bear fruit. However, in terms of marketing, the damage has already been done: the image of "old, crufty Tk" has been firmly planted in countless developers' minds, and no amount of facts are going to displace it in the near future. Another problem Tcl faced, as it grew, was the tug-of-war between those wishing to see it small, light, and easy to distribute embedded within some other program, and those wishing it to become a "full-fledged" programming language, with lots of tools for solving every day programs. Unfortunately, that tug of war seems to have left it somewhere in the middle. Lua is probably more popular these days as an embedded language, because it is very small, and very fast, and doesn't have as much "baggage" as Tcl. Meaning, of course, that it doesn't do as much as Tcl either, but for a system where one merely wishes to embed a scripting language, without much 'extra stuff', Tcl's extra functionality is perhaps a burden rather than a bonus. On the other hand, while Perl was happily chugging along with their CPAN system for distributing code, giving users easy access to a huge array of add-on functionality, and Python was building up a "batteries included" distribution, that included a lot of very useful software straight out of the box. Tcl, on the other hand, chose to keep the core distribution smallish, and only lately has got some semblance of a packaging and distribution system, that is, however, run by ActiveState, and is (at least according to a cursory glance at the Tcl'ers wiki), not even fully open source. The lack of a good distribution mechanism, and, in the meantime, eschewing a larger, batteries-included main distribution left Tcl users with a language that, out of the box, did significantly less than the competition. Technically, a Python style "big" distribution would not have been all that difficult, so once again, I think this is a marketing problem: a failure of the Tcl Core Team to observe the "market", assess what users needed, and act on it in a timely manner. Somewhat related to the large Tcl vs small Tcl issue was one particular extension, or extensions to the language that was noticeably absent: a system for writing "object oriented" code. Tcl, at heart, will never be an OO language through and through, like Ruby or Smalltalk, but that doesn't mean that an OO system for it is not a useful way of organizing larger Tcl systems. Indeed, Tcl's syntax is flexible enough that it's possible to write an OO system in Tcl itself, or, optimizing for speed, utilizing the extensive C API in order to create new commands. Over the years, a number of such systems have arisen, the most well-known being "Incr Tcl" (a play on the incr command, which is akin to += 1 in languages like C). However, none of these extensions was ever included with the standard Tcl distribution or somehow "blessed" as the official OO system for Tcl. This meant that a newcomer to Tcl wishing to organize their code according to OO principles had to pick a system to use from several competing options. And of course, newcomers are the least able to judge a complex feature like that in a language, making it a doubly stressful choice. Furthermore, even experienced Tcl programmers who wanted to share their code could not utilize an OO system if they wanted their code to work with just standard Tcl. Also, if their code had a dependancy on some OO system, it would require the user to download not only the extension in question, but the OO system it was built on, which, naturally, might conflict with whatever OO system the user had already selected! As of Tcl 8.6, thanks to the work of Donal Fellows, Tcl is finally integrating the building blocks of an OO system in the core itself, but this effort is probably something like 10 years too late. Some other more or less minor things that have taken too long to get integrated in the Tcl or Tk distributions include the PNG format (still not there in a production release of Tcl), a readline-based command line (Tkcon is nice, but not a replacement for simply being able to type "tclsh" and get a nice, functional shell like Python, Ruby and most other languages have. This could easily lead to a bad first experience for someone trying out Tcl). Tcl also took too long to integrate a first-class hash type (accessed with the 'dict' command), which only appeared in 8.5. Its "arrays" aren't bad, but don't quite have the full power of a hash table as dict implements them. Once again, the code to do these things was/is out there, it has just been a matter of integrating it into Tcl and Tk, which has been a slow process. One actual technical problem that Tcl faces is the concept that all values must be representable as a string. This is more or less ok for things like lists, hash tables or numbers, but is problematic when the user wishes to represent a value that simply isn't a string. A basic example is a file handle, which at the C API level is a FILE*. How does Tcl get around this? It keeps an internal hash table with a Tcl-script accessible string, such as "file5" that points to a FILE * value that is used internally by file commands. This works pretty well, but there is a big "but": since you can compose a string like "file5" at any time, that must be able to access the actual file pointer, you can't do any sort of "garbage collection" to determine when to clean things up automatically. Other languages have explicit references to resources, so the program "knows" when a resource is no longer referenced by the rest of the program, and can clean it up. Therefore, the programmer must explicity free any resources referenced this way. This explanation is simplifying things somewhat, but it is something I view as a technical problem with Tcl. If you've been following along, you've noticed a lot of "these days" and "recently". That's because Tcl is still very actively developed, with a lot of new ideas going into it. However, if you look at the release dates, it seems that after Ajuba was sold off, and Ousterhout pretty much abandoned an active role in the language for good, placing it in the hands of the Tcl Core Team, there was a lull in the momentum, with Tcl 8.5 taking 5 years to be released. This is actually, in my opinion, an interesting phenomenon in languages: you risk hitting some kind of local maximum when your language is popular enough to have a lot of users who will be angry if things are changed or accidentally broken in the course of big upheavals. So you have to slow down, go carefully, and not rock the boat too much. On the other hand, there is an opportunity cost in that newer languages with less to lose can race ahead of you, adding all kinds of cool and handy new things, or simply fix and remove "broken" features. Erlang is another system that has, in my opinion, suffered from this problem to some degree, but this article is long enough already! Once again, though, not really a technical issue, but a problem with how the code was managed (and not an easy one to solve, at that). A Tcl failure that I was personally involved with was the web infrastructure. What went on to become Apache Rivet was one of the first open source Apache/Tcl projects, and was actually quite a nice system: it was significantly faster than PHP, and of course made use of Tcl, which at the time had a large library of existing code, and could be easily repurposed for projects outside the web (or the other way around: non-web code could be brought in to a web-based project). One thing I ought to have done differently with the Apache Rivet project was listen to the wise advice of Damon Courtney, my "partner in crime" on the project, who wanted to see Apache Rivet have a fairly "fat" distribution with lots of useful goodies. Rails and Django, these days, have shown that that's a sensible approach, rather than relying on lots of little extensions that the user has to go around and collect. The code was out there, I should have helped make Rivet do more "out of the box". A problem that is and it isn't: the syntax. Tcl's syntax is amazingly flexible. Since everything is a command, you can write new commands in Tcl itself - and that goes for control structures, too! For instance, Tcl has a "while" command, but no "do ... while". It's very easy to implement that in Tcl itself. You simply can't do that in most "everyday" languages. However, this comes at something of a "cost". The syntax, for your average programmer who doesn't want to go too far out of their comfort zone, is perhaps a little bit further afield from the C family of languages than they would prefer. Still though, a "human" problem, rather than a technical one. Perhaps, sadly, the message is that you'd better not "scare" people when introducing a new language, by showing people something that doesn't look at least a little bit familiar. Conclusions? First and foremost, that, gradually, Tcl and Tk continue to be improved. However, if one visits developer forums, there are also a lot of negatives associated with the Tcl and Tk "brands", and I am not sure if it will be possible to rectify that. So what can we learn from the rise and subsequent "stagnation" of Tcl?

Cyril Brulebois: We need *you*!

We need you! (Thanks to Mauro for his nice thick-swirl design, fitting better than the traditional-swirl one.) The X Strike Force needs you! Thanks to the kernel team s work on getting DRM stuff backported to 2.6.32 kernels, and thanks to Sven s work on preparing both libdrm and xserver-xorg-video-nouveau, binaries are now available for users to try out! One should note I m a bit uncomfortable with publishing those binaries since I wasn t able to test those packages myself (I haven t got such hardware at the moment), but Sven reported it was working fine for him, and I received another successful report from a daring user (thanks, Duck!). Given the current ftp-master outage, I ve built i386 and amd64 binaries (using source from there), which are available through my people.debian.org page. libdrm* packages can be found in experimental, and 2.6.32-4-$arch kernels (built from linux-2.6 revision 2.6.32-10) in sid. Please keep in mind those are meant to be experimental packages. Depending on your hardware, you might have to download and install some firmware. Details can be read in this message, in that one, and in that other one (which arrived when I started writing this blog post, nice; that also means you may want to keep an eye on that thread). I guess versioning might be reworked at some point, you might have to manually select experimental or unstable packages once they hit the archive, but early testers probably are going to find their way, right? Feedback appreciated through debian-x@. Thanks already!

Next.

Previous.