Background for Project Ragnaroek

Midgard is an Open Source Content Management Framework originally designed to enable collaborative authoring for greywolves.org, a Finnish historical re-enactment portal.

Midgard was originally developed as a single-site solution during 1998. It was generalized to enable adoption by Stonesoft Corp. in spring 1999, and finally released to the Open Source community in May 1999 under GNU Library General Public License.

At this point Midgard provided its own connection handling module for Apache, mod_midgard, and a sizable patch to PHP 3.x series to give site developers access to the Midgard database. The requirement for patching strained relations between Midgard and PHP communities noticeably.

After PHP 4 was released with loadable extensions support Midgard's PHP connectivity was cleaned and database access was moved to a system library, midgard-lib. This process was finalized by release of Midgard 1.4 in Christmas 2000.

The Midgard architecture in 1.4 series utilizes three building blocks. The system library midgard-lib provides database connectivity and the command line repligard database-to-XML serialization tool. mod_midgard is built as a loadable Apache 1.3.x module and provides URL handling, database connection initialization and authentication capabilities. midgard-php4 is a loadable PHP4 extension providing both functional and object-oriented programming interfaces to the Midgard database.

This architecture has been proven stable and well-performing. However, the PHP eextension API has been seen as a moving target, creating gaps between PHP releases and Midgard's support for them. Similar problems have arisen with the stable release of the Apache 2 branch, requiring full rewrite of mod_midgard.

In addition to compatibility issues the current Midgard structure has been seen as difficult to extend. All changes to Midgard core need C programming, and specifically Apache API and Zend API expertise. Many Midgard solution developers have been calling for the ability to define their own Midgard object types and access methods, but this has so far been impossible.

These problems have brought up the need to rethink the whole Midgard architecture to provide easier extensibility and better compatibility with different versions of Midgard's dependencies.

The MidCOM Component Objects Framework has brought the possibility of creating complex applications on top of Midgard. Currently all Midgard applications are loaded, intepreted and executed fully for each individual HTTP request. Since loading the full component framework causes significant overhead better performance could be achieved by having a persistent application server available.

A competing implementation of the Midgard framework, Midgard Lite, appeared during 2002. This framework has been written fully in PHP, removing the need for complex dependencies and making extensions easier for Midgard application developers. While performance in Midgard Lite is not good enough for major deployments, it proves that the Midgard framework can be implemented in a lighter fashion.