Articles / Modular vs. Monolithic: The…

Modular vs. Monolithic: The winner is ...?

The history of software development is full of controversies. One of the oldest is the controversy about modular vs. monolithic software development.

In the Free Source community, discussing this subject probably goes back to the announcement of the GNU project, including the microkernel project GNU Hurd, by Richard Stallman in 1983. The microkernel architecture, first proposed by the MACH project of the Carnegie Mellon University, should have overcome design limitations of monolithic operating systems by providing only a thin (but extendable) software layer above the running hardware which offers full flexibility (and thus greater possibilities) to the system user. It didn't have only friends, though. One of its most prominent opponents was Linus Torvalds, the founder of the Linux operating system, which was first released in 1991. Torvalds not only chose the monolithic approach, he openly described existing microkernels as crap. (Others weren't speaking nicely about Linux, either.)

Over time, every corner of the software world was subject to similar debates. While the conservatives argued for the speed of monolithic products and raised panic about the implications of the complexity of modular systems, the evangelists praised the possibilities of flexibility, configurability, re-usability and interoperability.

The evangelists developed efficient component frameworks like ORBit and popular toolkits like GTK+ and, on top of them, complete development environments like the desktop environment GNOME. But the environments became somewhat monolithic themselves in respect to size, speed, interdependencies, and interoperation with other environments. GNOME is a very good example. It started as a concurrent to the already-existing KDE and didn't share a component nor even a protocol with KDE in the beginning. The size of the installed codebase was a few hundreds of megabytes. While there were only a few native desktop applications, non-native applications showed unexpected behavior because of lack of support for the new GNOME strategies.

Developing functional, modular environments turned out to be a highly sophisticated long-term business with less usability and interoperability than expected. Monolithic environments like MS Windows and applications like MS Word still ruled the software market, and they provided even more functionality than GNOME and KDE together. In fact, many desktop environmentalists began believing that without having their own MS Office-like super-applications, the whole Free Source market could be proven obsolete by the proprietary competitors. In consequence, even component model fundamentalists like Miguel de Icaza started projects like Gnumeric, an MS Excel clone, and Evolution, an MS Outlook clone.

On the other side, monolithic software development had already changed to a modern, mixed approach. The developers wanted to profit from modern strategies like object-oriented programming (OOP) and the available component models (CORBA, COM, and others). The new approach proposed making extensive use of the environment underneath. However, the most-criticized disadvantages of monolithic software, the low re-usability and interoperability, remained. Besides, only a few of the Free monolithic projects like OpenOffice or Mozilla could attract enough developers to maintain the huge codebase.

It turned out that both sides were only half successful, and that a combination of both models was the best way to overcome the inherent limitations. However, this is just a halfhearted solution compared to a real innovative strategy aiming at overcoming this situation. Miguel de Icaza, instead, propagates a brand-new development environment called .Net, which is out to conquer the Free software market soon -- though it's being developed by Microsoft. To not miss the deadline, Miguel started the mono project, a Free implementation of the .Net programming language C#, and invested a lot in promoting his great new vision.

However, even Microsoft doesn't seem to believe that .Net will overcome the era of monolithic products. The effort to integrate all of MS Office into .Net shows that only the next step in software development history is being taken: the era of modular monolithic applications. The .Net approach only translates the advantages of both software development models into a consistent (though quite big and complex) modern software development strategy. Microsoft doesn't change anything fundamental except that it, at least for itself, ends the controversy and draws its conclusions.

The reason for this philosophical change is quite economical. The future success of Microsoft is doomed to be based on a sane component model to avoid being passed by its competitors in the long run. This is because Microsoft is the developer of hundreds of products, defacto standards and other greater projects which have grown very complex over time and have to be mastered quickly and efficiently. The typical customer is not interested in such details and wants solutions that match his individual situation. This is true for both end-users and application developers, and it forces Microsoft to provide customer-centric frontends with well-known behavior. In other words, Microsoft must be able to feed its own needs as well as every customer wish with .Net. This also explains why Microsoft will not give away control over it.

The Free Source market doesn't have a central instance. However, from the bird perspective, it is one big, interdependent system which is organizing itself automagically like a fuzzy (but functional) alternative to .Net. This .free doesn't show a clear beginning nor a clear end, but if you want to have an overview, you just have to browse the DVD of your favorite distributor. The Free Source market has already taken a similar (but more random) approach to that of Microsoft, but the individual Free Source developer is too small to see it.

So, what is the moral of the story? The winner is both? No, actually not. Is it .Net? This may happen if we don't have an eye on it. Actually, at the moment, there is no clear winner. It seems that there are only clear losers. As explained above, both the monolithic and the component model can only coexist halfheartedly. On the other hand, .Net and .free, though they appear to be two different ways of creating a natural response to this problem, are not overcoming the inherent problems, but just trying to make the best of the situation. The .Net approach is the most consequent because it not only really fits all the parts together with just a single strategy, it comes with all the nifty stuff needed to reach the goal. There is really a lot that .Net includes which may make it the better approach already. This is also because other proprietary strategies like Java do not go so far and are developing in quite isolated ways. The .free approach doesn't even look like ever being able to reach this consistency because it develops too randomly to ever find a baseline that at least most free developers will agree on.

Here we come to the biggest thread of all. Even .Net can only offer, but not fulfill. And even Microsoft is too small to provide the software world with every piece of code the customers can think of. Therefore, it needs the help of other software houses, which means that the success of the .Net approach is in the hands of the proprietary software market. However, this market itself is not as flexible and open as .Net. Though .Net shows the potential, it may fail because it ends as the playdoll of commerce.

The .free-market, on the other hand, has the liberty and openness to make the new approach a success. However, this market can't even decide on a programming language. Even industry standards like CORBA and XML do not capture every Free developer's heart and mind. The potential may be left unused. This would mean that .Net is the best way to go.

What can we do to prevent this? We can try to agree. Not about the the right programming language, nor the right desktop environment, but we can try to agree on good practices and standards, regardless of how many programming languages we use to implement them in the end.

Fortunately, some groups, like FreeDesktop.org, still remember the good old rites like those celebrated by the X Consortium; they first discuss solutions and agree on them, and afterwards implement the code appropriately. Unfortunately, there are only a few such groups, and their manpower is low. Also, they are often too quick in developing the prototype and only documenting the particular API; remember CORBA and IDL. Nevertheless, we may see more people turning to this more scientific approach to software development in the near future. It may help us find good practices and standards we can all agree on -- at least in theory. Maybe then we'll come to the question of who is the winner, monolithic or modular development. Maybe then we'll ask: Who is the winner, .Net or .free?

Recent comments

29 Sep 2006 13:53 Avatar einhverfr

Re: Even Linus went (partly) modular

Just as a quick point, for general purposes you are right. However, there are times when I go as far back from a modular approach as possible. For example, I prefer it if firewalls are as non-modular as possible because it makes them much harder to change even in the event of a root compromise.

So horses for courses....

17 Oct 2004 22:37 Avatar mdnava

Who decides standards?
Well, is true some lack of agreement on programming languages and programming standards and I think the most logical future for Open Source is that they will be agreed or followed at some point, maybe not by the Open Source comunity itself but by big software companys like Microsoft.

The meaning of many Open Source apps is to offer a free clone of something "not free" like Unix, MS Office, Photoshop.

If Microsoft is saying .NET and Open Source would follow then we could have a starting point and .NET seems eclectic enough to fulfill the balance between the monolithic and modular schemas.

Open Source needs some logic and centralized way of developing software to keep up.

03 Sep 2004 13:36 Avatar t0yswar

Monolithic core with Modular specifications
Looking at the most efficient projects these days I feel that a monolithic core application answering the main functionnality with a modular (plug-in) multi language expendability to allow the advanced-users to add the functionality they need seems to be a good mix for user-centric applications (i.e. Eclipse, Firefox, Glade/GtK/libglade,... Linux, no user centric so...). It can also give the project maintainer the ability to integrate in the core the most accepted functionnality. It is important to well define the boundaries of the application (Eclise is getting to big trying to go outside the IDE world, and a fork would probably be a better option). What would be nice is to agree on inter-core communications at the user level (i.e. drag'n'drop) but also at the functionality level (i.e. Corba, EJB or XML/RPC) and at the data level (XML, RDB)... and while I'm at it if we could document beter to new developer how to separate the UI from the apps so that portability to Gnome, KDE, Web (XML/XSLT/JavaScript or Flash), SWT would be good.

05 Apr 2004 10:40 Avatar einhverfr

Not so sure


> Wouldn't modular programs basically be

> an incarnation of OO development

> (whereas procedural could be analagous

> to monolithic).

IMO, UNIX is MUCh more modular than Windows, despite the fact that Windows is more OO. I don't think that OO has anything to do with modularity. Furthermore, when your modularity is based (as in UNIX) on text streams and simple tools rather than (in Windows) on COM/object brokering, I think the system becomes more robust.

24 Feb 2004 23:37 Avatar erratio

One more quick thing
Wouldn't modular programs basically be an incarnation of OO development (whereas procedural could be analagous to monolithic).

Hmm...I lost track of what date it was and thought this conversation was more recent

Screenshot

Project Spotlight

Kigo Video Converter Ultimate for Mac

A tool for converting and editing videos.

Screenshot

Project Spotlight

Kid3

An efficient tagger for MP3, Ogg/Vorbis, and FLAC files.