`

另一只眼看Eclipse,所谓的开源

阅读更多
但凡有Java开发经验的同学,对Eclipse肯定不会陌生。出身名门IBM、精心设计的架构、强大的Community支持、Open Source、等等,这些数不尽的好处让Eclipse在短短几年之内横扫Java IDE领域,获奖无数,更是赢得了广大开发人员的尊重与爱戴。我自己就是和还算有经验的Java程序员,对Eclipse也算是比较熟悉。从Eclipse 2.1开始就一直密切关注着,不单单是使用,自己也做过Plug-in的开发,我想应该算有资格对Eclipse说两句。但是遗憾的是我要对Eclipse泼冷水了,虽然我打心眼儿里喜欢它,可这些话我还是要说。

仅仅从IDE的使用者角度上讲,Eclipse可以算是最接近完美的。虽然在其2.13.0版本上,会有狂吃内存、容易死机等缺点,但是到了如今稳定发布的3.1.x版本,这种现象已经很少,在即将发布的3.2版本中,还提供了手工激活垃圾回收的功能,我之前在Weblogic workshop中使用过这种功能,觉得是很实用的。

我今天的话主要是作为一个Eclipse Plug-in & RCP开发者而说的。Eclipse号称是一个开放的平台,任何人可以对其进行任何方面的扩展,这就是我们现在看到的成百上千的Plug-in;同时,Eclipse也允许用户裁减掉除核心模块外的任意组件,来构建自己的应用,这就是RCP。然而,这看似完美的flexibility后面隐藏着一些问题和不为人所知的秘密。

Eclipse Plug-in & RCP Development最大的问题就是版本不兼容性,在任意一个版本中开发的Plug-in都无法保证能在其他版本中正确运行。因此我们会发现,即使像MyEclipseSWT-Designer这样的商业Plug-in也摆脱不了版本的噩梦,它们不得不为2.13.03.1以及即将发布的3.2版本单独维护相应版本的Plug-in。同样的事情还发生在Plug-in之间的依赖上,如果一个Plug-in对其它一些Plug-in有所以来,那么必须保证使用了正确的版本,而其它Plug-in并不保证会版本兼容。所以想象一下,同学A很辛苦的写了一个以来于GEF的图形建模插件,花去了他6个月的时间,当他很高兴的宣布终于可以release的时候,他发现GEF有了新的版本,且与之前的版本不兼容。GEFEclipse的官方项目,同时Eclipse也推出了基于新GEF的官方Plug-in(不是图形建模),那么当同学B想同时使用同学APlug-inEclipse的官方Plug-in时,他应该怎么做?把这个scenario放到一个商业Plug-in中去,可以想象会有多痛苦。

然而这还不是最大的问题,真正让我决心写这片文章的并不是版本兼容性的不尽如人意,而是Eclipse背后隐藏的一些不为人知的秘密。之所以加引号是因为它并不是真正的机密,而是各位Eclipse的狂热追逐者没有看到的地方。

前一段时间,我参加了一个Eclipse官方项目JWT的建设与讨论,因此可以更深入的探究Eclipse Community内部的一些东东。为了技术准备,我开始在EMFGEFGMF三个newsgroup上发贴,提问,并很据自己尝试使用的经验说出自己的感受。我以一个Eclipse爱好者和开发者的身份问了许多问题,得到了许多帮助,这些我不会省略。EMFEclipse Modeling FrameworkGEFGraphical Editing FrameworkGEFGraphical Modeling Framework,大家可以看出,它们都跟建模和图形操作有关,实际上,GMF还以来于EMFGEF。这种依赖和重叠在Eclipse Community中比比皆是,所以我的问题是为什么不把它们做成一个项目。如果把这个问题退一步想,OK,现在是三个项目,那么它们可以无缝的交互衔接吗?答案是NO!这令我很惊讶,因为我觉得Eclipse作为一个设计如此之精巧的Platform理应有一个在后台一致的meta model,这也是.NET的做法。因此我在newsgroup上发贴说.NET有一致的meta model,就可以无缝的交互,为什么在Eclipse里面没有,为什么不设计一个,然后改变现在Eclipse及其Plug-in

然后,令我伤心的事情发生了,我的Gmail收到了一封匿名信,信中充满了羞辱和漫骂。我很震惊,我从没想过会发生这样的事情。在我心中,Eclipse Community即使不算是氛围最好,也至少是个风气健康的地方。这封Email极大的打击了我对Eclipse Community的积极性,然而,随后的另一封Email却改变了我对Eclipse Community和整个Open Source的看法。那是在辱骂信的第二天,一位好心的Eclipse员工写Email,他告诉我,Eclipse本身,包括其重要的官方项目如EMFGEF都在被一些大客户所以来,因此虽然你的建议是正确的,我们也无法作出任何改动。

就在那个时候,我明白了,所谓的Open Source,只是我们这些人的一厢情愿罢了。开源开源,开源并不仅仅是src-opened,当一个开源项目的代码积累的一定程度时,开放源代码其实没有任何意义,因为没有外人会读得懂它。我想,像MyEclipse这样以Plug-in为生的企业,一定花了不少钱在请Eclipse的人来培训和支持上面。开源更重要的是dev-opened,也就是说,左右开源项目发展方向的应该是任何一个参与开源项目的人的合理的、正确的idea,而不是依赖项目的客户。IBM现在的做法是把Eclipse的源代码开发出去,借此吸引广大的程序员为其免费开发Plug-in,而一些核心的东西,永远掌握在那么几个big fellow手中,他人无法触及。这就像一出滑稽的木偶戏,我们都是IBM手中的玩偶。

当我想到这些的时候,我开始问自己,世界上有真正的开源么?在当今的社会里,没有什么是永恒,只有商业价值,当我们再一次高呼开源的时候,是否应该想想自己是不是太疯狂了?


后记:这就是激起我学习.NET的直接原因。我关注.NET的有一阵子了,也告诉自己一定要学习.NET,然而无论怎样,这件事情算是导火索。
分享到:
评论
1 楼 yeshaoting 2010-11-28  
顶~~顶~~顶~~

相关推荐

    基于Python的蓝桥杯竞赛平台的设计与实现

    【作品名称】:基于Python的蓝桥杯竞赛平台的设计与实现 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目介绍】:基于Python的蓝桥杯竞赛平台的设计与实现

    python实现基于深度学习TensorFlow框架的花朵识别项目源码.zip

    python实现基于深度学习TensorFlow框架的花朵识别项目源码.zip

    3-9.py

    3-9

    郊狼优化算法COA MATLAB源码, 应用案例为函数极值求解以及优化svm进行分类,代码注释详细,可结合自身需求进行应用

    郊狼优化算法COA MATLAB源码, 应用案例为函数极值求解以及优化svm进行分类,代码注释详细,可结合自身需求进行应用

    563563565+3859

    5635356

    客户培训课程–金字塔式写作方法.ppt

    客户培训课程–金字塔式写作方法.ppt

    工具与方法工作手册.ppt

    工具与方法工作手册.ppt

    Image_1715565894150.jpg

    Image_1715565894150.jpg

    setuptools-34.3.2-py2.py3-none-any.whl

    文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    C语言快速排序.doc

    快速排序 C语言快速排序.doc C语言快速排序.doc C语言快速排序.doc C语言快速排序.doc C语言快速排序.doc C语言快速排序.doc

    基于Python+MobileFaceNet的静默活体检测系统的设计与实现

    【作品名称】:基于Python+MobileFaceNet的静默活体检测系统的设计与实现 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目介绍】: 2、实验环境 Windows 10(64位) CPU:AMD Ryzen 7 5800H RAM:16G GPU:NVIDIA RTX3060 开发工具:IntelliJ IDEA以及PyCharm 相关配置及版本: Chrome 90.0.4430.212 SpringBoot 2.2.6 Java JDK8 MyBatis 2.1.1 Mysql 8.0.25 Python 3.8 pytorch 1.7.1 torchvision 0.8.2 numpy 1.18.5 tensorboard 2.4.1 pandas 1.2.3 cuda 11.0.2 cudnn 11.2 torch 1.8.1 torchvision 0.9.1 3、模型训练命令 python train.py 4、模型测试命令

    基于JavaScript的交通时空大数据分析挖掘系统源码+运行说明.zip

    基于JavaScript的交通时空大数据分析挖掘系统源码+运行说明 项目描述 项目核心是百度地图 AMap和 echarts,用百度地图提供的API搭建的地图,项目中用到的有热力图、散点图和连线图,图表类型是由echarts提供的图表进行展示,包括饼图、柱状图 安装依赖 javascript

    麦肯锡—xx集团战略咨询项目建议书.ppt

    麦肯锡—xx集团战略咨询项目建议书.ppt

    pytest-6.2.1-py3-none-any.whl

    文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    麦肯锡--战略咨询培训手册.ppt

    麦肯锡--战略咨询培训手册.ppt

    graspnet-pybullet

    graspnet-pybullet

    xx电器品牌战略和营销组织架构-SHA----d.ppt

    xx电器品牌战略和营销组织架构-SHA----d.ppt

    麦肯锡-战略规划模板.ppt

    麦肯锡-战略规划模板.ppt

    短视频拍摄-课程网盘链接提取码下载 .txt

    短视频拍摄-课程网盘链接提取码下载 .txt

    ruby源码资源包,冲冲冲!

    Ruby是一种为简单快捷面向对象编程而创建的脚本语言,由日本人松本行弘(まつもとゆきひろ,英译:Yukihiro Matsumoto,外号matz)开发,遵守GPL协议和Ruby License。Ruby的作者认为Ruby > (Smalltalk + Perl) / 2,表示Ruby是一个语法像Smalltalk一样完全面向对象、脚本执行、又有Perl强大的文字处理功能的编程语言。 Ruby以7月的诞生石ruby(红宝石)命名,是因为Perl的发音与6月的诞生石pearl(珍珠)相同。Ruby明显比其他类似的编程语言(如Perl或Python)年轻,又因为Ruby是日本人发明的,所以早期的非日文资料和程序都比较贫乏。

Global site tag (gtag.js) - Google Analytics