BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

Composite C1是如何通过开源方式找到成功之路的

| 作者 Jonathan Allen 关注 612 他的粉丝 ,译者 邵思华 关注 3 他的粉丝 发布于 2014年8月28日. 估计阅读时间: 12 分钟 | ArchSummit北京2018 共同探讨机器学习、信息安全、微服务治理的关键点

在当前的环境下,开发商用产品变得越来越困难了,尤其是在那些竞争非常激烈的领域中,例如内容管理系统。Composite C1也发觉到它们的市场在不断萎缩,在这种情况下,它们终于找到了一条生存之道,即将它们的核心产品开源,并在云端进行托管。

在与Marcus Wendt进行的一次访谈中,我们了解了Composite C1整个15年的历史,并看到它是怎样从一个商用软件的新手成为一个拥有大量客户的开发平台的。

InfoQ:让我们首先从Composite C1的历史开始说起吧,这个项目的成因是什么呢?

Marcus对我们来说,Composite C1是一次大规模尝试?????的顶点。我们从1999年开始就致力于开发web内容管理系统,当时我们还是一家闭源的商业软件公司,使用的也是当时正当红的微软技术,例如ASP、VB、C++、COM和SQL Server。CMS是我们的主打产品,也是优势所在,当时我们作为一家CMS提供商在斯堪的纳维亚(北欧)地区获得了成功。但随着时代的前进,我们的产品开始显得落伍了,即使我们花费了很大力气将部分系统升级到.NET平台上,也没有改变这一局面。

这一情况提醒我们必须完全舍弃陈旧的代码,从头打造一套全新的CMS系统。这项工作从2007年一早开始,随后在2008年4月,我们终于发布了Composite C1的1.0版本。从开发者的角度来看,这是一段非常令人振奋的时期,因为像LINQ和Workflow Foundation等新技术开始出现在.NET Framework中,而且更先进的浏览器也在不断进化。

1.0版本在很多方面还是具有一定实验性质的。我们创建了一个基于LINQ的数据访问层,它使用了表达式树转换,它使我们能够按照抽象的数据接口访问SQL Server以及内存中的数据(XML文件)。作为类型安全数据系统的一部分,CodeDom使我们能够动态编译CLR运行时类,这样我们就能够用户界面上生成能够与.NET完美交互的数据类型了。我们也用到了Workflow Foundation,这在当时还是门很新的技术。我们也编写了一个在线管理界面,使用JavaScript将服务端生成的一种类似XUL的抽象标签(类似于<ui:tabbox />和<ui:splitpanel />)转换为HTML。我们使用了微软的模式与实践(Patterns & Practices)小组推出的Enterprise Library套件编写了一系列应用构件块,以确保这套CMS具有高度的可插用性(pluggable)。

在那之后,我们花费了一些时间让Composite C1符合工业标准。之后的18个月,我们致力于提升系统的性能与稳定性,并完善一些基本特性。我们特意选择了一些合作伙伴与客户到丹麦来共同参与这一流程。

到了2009年9月,距1.0版本的发布已经过去了18个月,在此期间我们也发布了多个版本的补丁包。我们此时的系统已经经过充分的测试并且已经相当稳定。它具有一套优秀的特性集合,并且拥有良好的技术架构与基础设施,能够让我们不断完善这套CMS。使用这套CMS进行内容编辑的体验非常好,.NET和web开发者也能够利用它打造一套经过高度定制的解决方案。

InfoQ:Composite C1是一套商用产品,你们为什么会决定将它开源呢?

Marcus作为一家商业公司,我们在创建Composite C1时所面临的挑战主要是在本地市场上几乎没有任何影响力。随着WordPress和Joomla这些系统的出现,人们对于CMS市场的期望渐渐从传统的商用软件模式转变为开源软件或免费软件的模式。由于受众面的狭小、市场区域的限制以及所面临的近乎疯狂的竞争,我们开始重新审视我们的市场策略。

我们讨论了各种可能适用于我们的商业模式,例如价格竞争、打造“杀手级特性”、建立免费软件模式或是开源模式。我们拥有一套非常优秀的软件,它使用了.NET环境下最新与最优秀的特性,拥有一套非常健康的代码库,因此我们对于开源及共享它感觉十分自豪。如果我们把目光放远一些,我们就能看到全球市场上迫切需要一款高质量的开源.NET CMS系统,而当时的选择非常少。我们非常希望能够将Composite C1推向全球,让它站到聚光灯之下,围绕这款产品打造出一片社区,帮助它逐步壮大,同时也激发出.NET开发者的热情。综上所述,开源是一种很好的选择。

接下来的几个月我们慎重地考虑了我们的想法,毕竟我们对于开源了解甚少,要学习的东西很多。我们发布了最新版本的代码之后,就开发了繁重的代码重构工作:重新组织类和命名空间、添加更多的文档、并且进一步改善了入门指南,让开发者在下载软件后只需简单的操作就可以搭建起整个网站。

2010年9月,我们在CodePlex上发布了完整的源代码,基于Mozilla Public License 1.1授权。

从那时起,许多事情都显得不一样了。这套产品不再是一个本地的、封闭的产品,它得到了数千次下载,在一百多的国家里得到应用,我们的论坛变得异常活跃,志愿者们提交了各种补充。有各种各样的网站开始使用我们的CMS系统进行搭建,包括小型的个人婚礼展示网站,到财富500强的网站应有尽有。人们的反响热烈,通常都是正面的、有创造性的并且非常友好,我们在CodePlex上的网站得到了大量的5星评价和正面的反馈,这一切都非常美妙,它极大的鼓舞了我们这些核心团队成员们的斗志和好胜心:)

InfoQ:Azure对于Composite C1来说似乎是个非常重要的平台。为什么你们选择了这个平台,而不是诸如Amazon等其它公司推出的云平台呢?

Marcus我们可以选择自行托管的方式或是托管在Windows Azure平台上,我们从很早开始就关注Windows Azure平台,因为在技术上同我们十分契合。在.NET环境下,Windows Azure所提供的工具、服务和API超越了我们所见过的其它任何平台。由于.NET是这个平台下的一等公民,整个云基础设施使用起来感觉就是一种非常自然的扩展,我们也相信这个平台能够保持良好的发展。

从商业的角度上看,Windows Azure也是一个非常有趣的平台,由于多数用户使用的是Composite C1的免费服务,我们探索了各种方式,以寻求为用户提供有价值的服务,并从中盈利,以继续我们的软件开发。为高质量的托管花费一些费用是能够接受的,而Windows Azure也为我们提供了价廉物美的各种托管选择。因为将Composite C1作为服务提供给用户,而且用户只需几分钟时间就可以通过该服务搭建起一个可运行的网站,这也使得我们的用户量进一步提升了。

InfoQ:Composite C1是否支持Mono呢?

Marcus很遗憾,目前还不支持,因为我们的产品所依赖的一些.NET特性目前还没有移植到Mono上,我们目前也没有足够的精力来帮助Mono实现这部分功能缺失。

InfoQ:你能具体说一下这部分的细节吗?

Marcus我们上一次尝试解决Mono上的最大问题距今已经有一段时间了,但一个至今也无法逾越的障碍就是Workflow Foundation,我们使用了一些.NET 3.5中新加入的特性,而这部分内容至今还未加入到Mono中。

随着.NET 4的推出,微软推出了全新的WF,使用了新的命名空间,我猜测微软大概是对WF进行了完全重写。之后的.NET 4.5版本就将早期版本的WF功能全部认定为过期功能了。

这一新版本的推出或许能够促进我们的产品对Mono的支持吧。

InfoQ:Composite C1的团队规模有多大?这些团队成员都是内部员工吗,还是说你也会从社区中获取一些志愿者提交的代码呢?

Marcus目前的核心开发团队一共包括了三名成员,Dmitry Dzygin、Taras Nakonechnyi和我。除此之外,Poul Kjeldager Sørensen负责在Windows Azure平台上的工作,而Vitaly Vysotskyi则确保我们发布的产品具有完善的文档和测试。Inna Boitsun也有很天分,他帮助我们维护上手指南模板以及特性包(package)。我们的CEO Oskar Lauritzen当然是关注于销售的部分,最后是我们的万事通Pavlo Kuzminskyi,他专注于客户支持以及运行整个公司的其它一些部分。荣誉也同样属于Jesper Moth和Martin Ingvar Jensen,他们在产品开发的前4年前是核心团队中必不可缺的人物。

虽然主体的工作是由内部人员实现的,但我们同样欢迎并且鼓励社区成员为我们提交代码,同时我们也非常重视公众提交的各种缺陷追踪。我们目前只剩下12个还没解决的bug,同时我们也尽力为用户加入他们最想加入的新特性。

当我们刚开始将代码开源的时候,还没有使用ASP.NET中的母版页功能打造页面模板,也没有使用Razor引擎进行内容展现,这些部分的缺失是由一位名叫Pauli Østerø的社区成员替我们填补的,他将这些功能加入到了额外的包中。他的贡献引起了社区中许多人的关注,我们最终决定将这部分内容加入到我们的核心代码中。类似这样的社区贡献对我们的产品继续发展是非常有帮助的。

我们也陆续收到了许多小型的补丁文件,以补充核心部分的功能,例如对用户界面语言的翻译文件,包括德语、汉语和俄语等等。此外也有许多优秀的特性包(插件),比如某个特性可以允许Entity Framework与Composite C1的数据访问系统进行无缝的集成。

总的来说,我们花了不少时间来验证这些提交代码的质量,尤其是对核心功能部分的补丁经常需要进行一些适配工作。我们已经按照这种方法运作了很长时间,因为我们需要保证代码的可靠性和可维护性,而且比起为用户提供大量重复的特性和选项,我们宁可让用户在使用Composite C1时不要遇到任何错误。

关于受访者

Marcus Wendt是Composite C1项目的负责人,该项目是一个开源的、运行于.NET web技术栈之上的web CMS产品。他最关注的方面是为终端用户和开发者提供良好的用户体验。你可以通过他的网站twitter了解到他的更多信息。

查看英文原文:How Composite C1 Found Success by Becoming Open Source

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT