BT

How Composite C1 Found Success by Becoming Open Source

Posted by Jonathan Allen on Mar 13, 2014 |

In today’s environment it is difficult to offer commercial products, especially in highly competitive fields such as content management systems. Finding themselves being squeezed out of the market, Composite C1 found a way to thrive by releasing their core product under an open source license with cloud based hosting.

In an interview with Marcus Wendt we learn about Composite C1’s 15 year journey from a fledging commercial project to an open source platform with dozens of partners.

InfoQ: Let’s start with the history of Composite C1. What first prompted the creation of the project?

Marcus: For us Composite C1 is the culmination of a larger journey. We began developing web content management systems in 1999 as a commercial closed source company using the classic Microsoft technologies available at that time - ASP, VB, C++, COM+ and SQL Server. The CMS has always been our focus and strength and we created a successful presence in Scandinavia as a CMS vendor, but as years passed, our old platform became increasingly outdated despite the efforts to migrate portions of the system to .NET.

This prompted us to abandon our old code base and write a completely new CMS from the ground up. This work began in early 2007 and in April 2008 we released version 1.0 of Composite C1. From a developer's point of view these were pretty exciting times as technologies such as LINQ and Workflow Foundation were making it into the .NET Framework and modern browsers were emerging.

Our 1.0 release was in many ways experimental. We created a LINQ based data layer with expression tree transformations, which allowed us to run on both an SQL Server and in-mem (XML files) using interfaces as data abstractions. CodeDom allowed us to dynamically compile CLR classes runtime as a core part of a type safe data system, enabling creation of data types from a UI in a way that interfaced perfectly with .NET. We also used Workflow Foundation which was pretty new at that time and we wrote an administrative web interface where JavaScript transformed abstract XUL-like markup (like <ui:tabbox /> and <ui:splitpanel />) from the server into HTML. We used Enterprise Library from Microsoft’s Patterns & Practices group to create a host of application blocks, ensuring that the CMS was highly pluggable.

From that point, bringing Composite C1 up to industry standards took some time. Getting this system to perform well, be stable and have the basic features expected of a CMS anno 2009 took another 18 months, a process we went through with a select group of partners and customers here in Denmark.

In September 2009 – 18 months and many service packs after our 1.0 release - we had a battle tested and stable CMS with a sound feature set and architecture and a technical infrastructure that allowed us to grow the CMS moving forward. It was nice to author content in the CMS and .NET and web developers were able to build highly customized solutions.

InfoQ: Composite C1 is a commercial product, so why did you decide to also offer it as open source?

Marcus: Our challenge at that time – as a commercial company - was that we had been nearly invisible in our local market while we were building Composite C1 and thanks to systems like WordPress and Joomla the expectations in the CMS market had changed from a classic commercial software model to an open source / freemium model. With a low exposure, a regionally limited reach and fierce competition we reevaluated our go-to-market strategy.

We discussed the different models available to use, like competing on price, trying to think up “the killer feature”, making a freemium model or going open source. We had a darn good piece of software, based on the latest and greatest innovations in the .NET space and with a healthy code base that we would be proud to open source and share. Looking out the window we saw a huge global market for a quality open source .NET CMS with very few existing systems. We very much wanted to go global with Composite C1, jump into the spotlight, build up a community around the product to help it grow and activate the dynamics of happy .NET developers. Going open source just made sense.

We spent the following months sanity checking our idea – open source was not something we knew very much about and we had a lot to learn. We wrapped up our last closed source release and then began heavy refactoring on the code base, reorganizing classes and namespaces, adding more documentation and taking the getting started experience to a point where developers could download the software and get a site up and running with very little effort.

In September 2010 we published our entire source code on CodePlex, making it available under the Mozilla Public License 1.1.

From that point on it has been quite a ride. We went from a local and obscure presence to thousands of downloads, used in more than a hundred countries, getting intensive activity in our forums, seeing fantastic contributions and seeing our CMS powering websites ranging from the small private wedding site to Fortune 500 company sites. People have been overwhelmingly positive, constructive and friendly – the feedback and consistent 5-star reviews we have gotten so far on CodePlex have been fantastic, something that really helps keep up the morale and fighting spirit in the core group :)

InfoQ: Azure seems to be an important platform for Composite C1. Why did you choose to focus on it over other cloud platforms from companies such as Amazon?

Marcus: We can run on premise and on Windows Azure. We began focusing on Windows Azure from very early on because there was a perfect technology fit, and in the .NET world the tooling, services and APIs you get with Windows Azure are beyond anything we have seen elsewhere. Since .NET is a first class citizen all over, the entire cloud infrastructure works like a natural extension and we can trust things will stay this way moving forward.

Windows Azure is also an interesting platform from a commercial point of view. Since most people use Composite C1 gratis we look at ways we can provide a valuable service and, through that, generate funding for our continued software development. Paying money for quality hosting is generally accepted and Windows Azure allows us to offer both cheap and saleable hosting options. Providing Composite C1 as a service where you can visit our website and have a site running a few minutes later also allows us to expand our reach.

InfoQ: Does Composite C1 support Mono?

Marcus: No, sadly we are dependent on features in .NET which haven’t been ported to Mono and we don’t have the resources to contribute to Mono to help fill out those gaps.

InfoQ: Can you go into more detail?

Marcus: It is some ago we last looked for the biggest issues we had with mono, but a big showstopper was and is Workflow Foundation - we are using the flavor of WF that released with .NET 3.5 and this never made it to mono.

With .NET 4 Microsoft released what I guess was a complete rewrite of WF with new namespaces and all and left the initial WF in the dust, deprecated in .NET 4.5.

So we have a task there, and by that we would be closer to Mono support.
 

InfoQ: How large is the Composite C1 team? Are they all internal or do you also take code submissions from the community?

Marcus: Currently the core development team consists of three people – Dmitry Dzygin, Taras Nakonechnyi and me. Poul Kjeldager Sørensen spearheads our Windows Azure efforts and we have Vitaly Vysotskyi ensuring we ship documented and thoroughly tested bits. Our talented Inna Boitsun focuses on starter templates and feature packages, while our CEO Oskar Lauritzen focuses on sales, and our jack-of-all-trades Pavlo Kuzminskyi focus on helping customers and the rest of our organization. Honorable mentions should also go to Jesper Moth and Martin Ingvar Jensen who were indispensable members of the core team through the first 4 years of development.

While the bulk of our work is done internally, we both welcome and promote code submissions from the community and we take our public issue tracker very seriously. We only have 12 open bugs and we try hard to include top voted feature requests.

When we went open source we were missing core support for ASP.NET Master Pages for templates and Razor for content renderings, and this gap was filled by Pauli Østerø, a community member, who contributed these as separate packages. This gained so much traction in the community that we absorbed it into our core and work like that has been really helpful moving forward.

We have also received a lot of smaller patches to the core, full translations of our UI to languages like German, Chinese, Russian etc. and some great feature packages (add-ons) that bring in things like seamless integration between Entity Framework and the Composite C1 data system.

In general we spend time on ensuring quality in these submissions, especially patches to the core which we tend to adapt a lot. We are in this for the long haul and need our code base to be sound and easy to maintain, and we prefer that people using Composite C1 have an error free experience rather than an abundance of options.

About the Interviewee

Marcus Wendt is lead on the Composite C1 project - a web CMS that is open source and running on the .NET web stack - where he is mostly concerned with giving both users and developers a good user experience. You can reach him on his website and on twitter.

Hello stranger!

You need to Register an InfoQ account or or login to post comments. But there's so much more behind being registered.

Get the most out of the InfoQ experience.

Tell us what you think

Allowed html: a,b,br,blockquote,i,li,pre,u,ul,p

Email me replies to any of my messages in this thread

Lack of Mono by Norbert Haberl

At least it would be perfect to support other RDMS systems if you cannot go with Mono.
Go Open Source and supporting just Sql Server is a bit queer...isn't it?!

And yes...I know of your xml support ... although it's no RDMS so far.

Re: Lack of Mono by Marcus Wendt

The Composite C1 core is data store agnostic - the link between the data store and any code accessing data via Composite C1 is provider based (with strong emphasis on LINQ) so you can write a provider to another RDMS.

We support different levels of data providers (read only, read/write and read/write + dynamic schema support). The latter is what could replace our SQL or XML based providers and while it is not trivial code, the system is open source and intended to be extended in exactly this way.

I posted a feature request for support for an RDMS like MySQL at compositec1.codeplex.com/workitem/1029 but the upvotes haven't been overwhelming and no one in our community have written a provider alternative to my knowledge, so we are where we are.

More info on data providers is available at docs.composite.net/Data/CustomDataProviders - also looking at our source code (see namespace Composite.Plugins.Data.DataProviders.MSSqlServerDataProvider).

Write one and we'll gladly help you share it.

Allowed html: a,b,br,blockquote,i,li,pre,u,ul,p

Email me replies to any of my messages in this thread

Allowed html: a,b,br,blockquote,i,li,pre,u,ul,p

Email me replies to any of my messages in this thread

2 Discuss

Educational Content

General Feedback
Bugs
Advertising
Editorial
InfoQ.com and all content copyright © 2006-2014 C4Media Inc. InfoQ.com hosted at Contegix, the best ISP we've ever worked with.
Privacy policy
BT