生成式AI领域的最新成果都在这里!抢 QCon 展区门票 了解详情
写点什么

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

  • 2014-08-27
  • 本文字数:3793 字

    阅读完需:约 12 分钟

在当前的环境下,开发商用产品变得越来越困难了,尤其是在那些竞争非常激烈的领域中,例如内容管理系统。 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

2014-08-27 01:231846
用户头像

发布了 428 篇内容, 共 171.7 次阅读, 收获喜欢 37 次。

关注

评论

发布
暂无评论
发现更多内容

「硬核实操」如何拥有一个自己的数字人模型

京东科技开发者

京东云 数字人 企业号 4 月 PK 榜

架构训练营 - 模块八作业

Sam

架构实战营

Spring Cloud Alibaba 应用如何平滑迁移至 IPv6?

阿里巴巴云原生

阿里云 云原生 Spring Cloud Aliababa

阿里架构师花近十年时间整理出来的Java核心知识pdf(Java岗)

Java你猿哥

Java java面试 Java工程师 Java面经 春招

声明式编程:by example

agnostic

声明式

Java异常处理和最佳实践(含案例分析)

阿里巴巴云原生

Java 阿里云 云原生 JVM

我没能实现始终在一个线程上运行 task

newbe36524

C#

Go flag 标准库源码解读

江湖十年

后端 命令行 Go 语言

2023年金三银四牛客网最新版大厂Java八股文面试题总结(覆盖所有面试题考点)

采菊东篱下

Java 编程

Python:如何写输入与输出

强劲九

Python

故障处理与自动驾驶(63/100)

hackstoic

架构设计

释放商业潜力:掌握成功IT数字化转型的三大关键

L3C老司机

数字化转型 工程效能 业务赋能 胜任力 IT咨询

Spring探索丨既生@Resource,何生@Autowired?

阿里巴巴云原生

spring 阿里云 云原生

PyTorch深度学习实战 | 预测工资——线性回归

TiAmo

深度学习 线性回归 PyTorch 梯度下降法

selenium源码通读·1 | 源码目录

Python 源码 自动化测试 selenium

Activity登堂入室

攻城狮Wayne

windows Activity View

5 分钟读懂开源服务框架 Dubbo 及其最新规划

阿里巴巴云原生

阿里云 云原生 dubbo

如何用一个端口同时暴露 HTTP1/2、gRPC、Dubbo 协议?

阿里巴巴云原生

阿里云 云原生 dubbo

【原理揭秘】Vite 是怎么兼容老旧浏览器的?你以为仅仅依靠 Babel?

京东科技开发者

前端 企业号 4 月 PK 榜

前端里那些你不知道的事儿之 【window.onload】

京东科技开发者

前端 京东云 京东技术 京东科技 企业号 4 月 PK 榜

​openEuler 23.03 正式发布,聚集社区创新力量,增强基础技术能力,协同全场景创新

openEuler

Linux 运维 操作系统 openEuler 桌面开发

想拿到10k-40k的offer,这些技能必不可少!作为程序员的你了解吗

Java你猿哥

Java 面试 架构师 面经 Java工程师

既然有了MySQL,为什么还要有MongoDB

Java你猿哥

Java MySQL 数据库 mongodb Java工程师

超级视频播放器:nPlayer for Macv1.4.0中文激活版

真大的脸盆

Mac Mac 系统 视频播放器 视频播放 视频播放软件

全栈声明式可观测:KubeVela 开箱即用且灵活定制的云原生应用洞察

阿里巴巴云原生

阿里云 开源 云原生 KubeVela

自动化测试理解

测试 自动化测试

提升集群吞吐量与稳定性的秘诀: Dubbo 自适应负载均衡与限流策略实现解析

阿里巴巴云原生

阿里云 开源 云原生 dubbo

Low-Code,一定“low”吗?

京东科技开发者

低代码 京东云 京东技术 京东科技 企业号 4 月 PK 榜

SSD 存储领域厂商大普微加入龙蜥社区,完成与龙蜥操作系统适配

OpenAnolis小助手

开源 操作系统 龙蜥社区 CLA 大普微

又是一季金三银四,Spring之AOP知识要点总结

Java你猿哥

spring Spring Boot ssm aop

AI大模型已经出现不可预测的能力

Baihai IDP

人工智能 深度学习 NLP 大模型 ChatGPT 企业号 4 月 PK 榜

Composite C1是如何通过开源方式找到成功之路的_开源_Jonathan Allen_InfoQ精选文章