Open source identity: Spine CMS creator Hendrik Van Belleghem

Looking for a Web-based content management system that uses Perl instead of PHP? Want to serve dynamic and static content with PostgreSQL, not MySQL? What started out as a hobby project by Hendrik Van Belleghem, based in Bazel, Belgium, has grown into Spine – a Perl Web content system for Apache on Unix systems. With so many LAMP (Linux Apache MySQL PHP) content systems available, Spine offers a refreshing alternative with the tried and tested Perl language and is database independent. Open Source Identity interviews Van Belleghem about Spine, a lesser-known alternative to the popular Web CMSs.

How did the Spine CMS project start and how many lines of code have been developed since its inception?

Spine was developed to scratch an itch. About 10 years ago, some friends and I were asked to build a new Web site for the college we attended. One of us had developed a PHP application called Baseweb, which we used as the back-end to the Web site.

I wanted to build my own site, but lacked the knowledge to do it in PHP. I had picked up Perl about 2 years prior so it seemed like a good challenge to write a CMS from scratch.

Initially, it started out as a collection of CGI scripts, using the features from Baseweb as a guide. The first release of Spine had around 1000 lines of Perl code. Right now, it's roughly about 16,000 lines. Quite a few of the basic features from Baseweb still exist in Spine to this date.

The project has gone through some major overhauls over the years, both on the technical (code clean-ups and rewrites, platform support, documentation, features and design) and practical (source control, project management and bug tracking).

What is unique about Spine and is there a market Spine is particularly well suited to? The fact that it's completely Web-based, including administration, is interesting.

I've always set certain requirements when I looked at Spine's design. I wanted it to be intuitive, low on dependencies and fast. I didn't have a specific target market in mind when I started. It was more of a personal itch. Along the way, I tried to generalize the feature-set and usability to suit a wider crowd.

There are a few of the things that pop out at me, for instance, the transparency of dynamic content. Basically, this means that for the visitor, the site looks static. It is possible to mix existing (real) files and dynamic content. Spine will automatically pick this up and serve the static content over the dynamic content with the same filename. Another feature, granular access control, seems to be one of those things that half the professional CMSs out there still don't have.

The multiple database support is a very nice feature that you won't find that often. Once the Web server is configured and the database is loaded with default site content, site maintenance is done completely through the administration panel. On the side of mod_perl (which provides the speed, similar to how PHP gets it's boost), both version 1 and version 2 are supported. A CGI back port is also in the works.

What level of feedback have you had from Spine users and what is the community like?

Like far too many Open Source projects, the user base is quite limited. Occasionally, I get a question from someone about installation or configuration. In the past, I've had code contributions, feature requests and template and documentation contributions.

I’m very grateful for that feedback and I encourage feedback. I've received good responses from the people that do use it but I fear that the slow development cycle might have scared a few.

There are quite a few open source content systems developed with PHP, why did you choose Perl?

At the time of the first release, PHP was not as mature as it is now and Perl 5 was also quite new. Perl was the language that appealed to me the most, partly because it just wrote naturally. CMSs only became mainstream a few years later and by that time, there was no argument to switch to something else. I've never regretted choosing Perl.

The Perl community as a whole is just wonderful and they've helped me quite a bit in picking up new things (quite a few that could be applied in Spine).

Page Break

Why do you think PHP-based open source CMSs are so popular and Perl ones are not? Is Perl more difficult to start coding a CMS with?

First of all, there are more PHP Web applications out there, I believe, mainly because of the ease of use. PHP gives you quick results, but it comes with a price. I feel PHP is more of a designer-focused language, which appeals to the Web 2.0 addicts we've all become. It has a lower learning curve than Perl. It takes a bit of time to get up to speed with Perl but it does pay off in the long run.

Syntactically, I find Perl to be better than PHP. I feel there is more consistency in the language flow. I occasionally pick up a PHP book (I own a few) and I still can't see a reason to switch over.

CMSs have also become more mainstream over the years. All the bigger companies (and tons more of the smaller ones) have, in some shape or form, developed their own CMS. More and more programming languages are available to program in and new technologies make it easier to build a desktop application-like environment. Having a Web site, blog, social network page or online photo album is no longer considered to be as geeky as it was years ago. It's supply versus demand.

Also, many open source CMSs only support MySQL, how important is it to support PostgreSQL as well? How does Spine achieve its database independence?

When I moved to databases from flat-text files about 6 years ago, I focused on being RDBMS independent. Every database has its specific quirks so there is always some tweaking needed. When adding a new database to the supported list, I spend time on data dumps, tweaking the abstract data class (which normally is a quick job) and most of all, getting to know the ins and outs of the database itself (how user privileges work, data types, etc).

To be able to support different databases, I stick to Perl's DBI module and the abstract database class, which simplifies all the calls and spits out records like objects. The reason why PostgreSQL and MySQL are supported now is because they are freely available and quick and easy to use. I've experimented with both Sybase and Oracle but nothing solid came out so far. Adding official support for either should not be too difficult.

How is the release-cycle going? Are you planning to move to a fixed time frame for Spine releases?

Since the development is done by just me, the release cycle is limited by my free time and inspiration. There are quite a few areas where I could use some help. Over the years, I have picked up some skills, but I’m far from a designer or a copywriter. After working on something for so long, everything is obvious and natural. You start to lose the “novice” point of view.

Spine is licensed under the GPL v2. Will you make future releases available under the GPL v3 or another a licence that requires people who use software as a Web service to make any changes public?

Good question. I never really looked into it. GPL v2 has suited me so far.

Many of today's Web content systems are used as blogs and have different modules for integration with third-party applications like Facebook and Twitter. How can Spine work with the Web 2.0 world?

On the front-end site, plug-ins can be loaded on a tag level, by using an HTML tag into the content or style. This allows you to change or update the content. You can use this type of plug-in to generate, for instance, a pie chart based on visitor statistics. Spine handles this by allowing you to set the media type of a page. Insert a custom plug-in tag and you have a pie chart or a Flash animation.

On the other side, you can have custom administrative panels. Spine already has a built-in file manager, user manager, statistics panel, and import and export panels.

The abstraction of the database layer gives you a clean way to use new tables for your plug-ins. There’s also a general-purpose table you can use for smaller data dumps or to extend an existing data type.

When you're not hacking on Spine what other jobs and interests do you have?

In my superhero time, I work with WANs and try to keep them up all running using tools like HP OpenView NNM (which also includes an occasional Perl scripting task).

Most of the software I use runs on Sun hardware so I picked up quite a bit of Solaris experience on the way. In the last few years I've tried to move away from Linux at home and now spend most of my time on Mac OS X.

In my real spare time, I'm learning Spanish (New Year's resolution #1), am learning Objective-C and Cocoa (New Year's resolution #2), started bowling (not really counting as the sport I was going for in New Year's resolution #3) and enjoy the occasional photography moments.

Copyright © 2009 IDG Communications, Inc.

8 simple ways to clean data with Excel
Shop Tech Products at Amazon