一个轻松无聊的晚上突然想到一个问题——在当今这个Git大红大紫的时代,OpenBSD为何还在用CVS代码仓库?连他同阵营的FreeBSD都已经改用SVN,宣布逐渐废掉CVS了……问了下google,搜到有人问同样的问题。(btw:本人不善英文,只是按意思简单翻译,可能翻的很蹩脚,英文好的童鞋直接看原文最好。)

http://openbsd.7691.n7.nabble.com/Why-does-OpenBSD-use-CVS-td226952.html


[Alokat]
Hi, first, I don't want to start a flame war about why is CVS better or not better than X - it's just a question.
If you say, we use it because it just works - it's okay. :)
So why does OpenBSD still uses CVS and don't migrate to SVN or something like git as other OSS projekts do?
嗨,首先,我不想引起为什么CVS比其他版本控制系统好坏的论战,我只想知道为什么,哪怕是你说它刚好能工作也行。
那么为什么OpenBSD仍然在使用CVS,而没有迁移到其他开源代码项目使用的SVN或git呢?

[Stuart Henderson]
my 2p: like all version control software CVS has bugs, but between us,
developers have a reasonable idea of how to avoid them in CVS, there's
less knowledge about other version control systems.
Also having the repository stored in human-readable (ish) files is an
advantage if there was ever any repo corruption.
You might also ask why some other OS use source control software which
they don't even include in the base OS ;-)
向其他版本控制系统一样CVS也有bug,但是开发者都有办法能绕开这些问题,并且相比其他版本控制系统,使用CVS并不需要太多的学习成本。
而且使用肉眼能读的文本文件作为版本仓库。

  • 简单(Simple),这个就不用解释了……
  • 文本化,这正是Unix的哲学之一,不了解的同学可以去看下《Unix编程艺术》中相关的章节。CVS沿用古老的RCS的存储方式,版本库都是文本文件,可以直接用editor打开看,甚至编辑,不得不说这点相对SVN/Git等确实是优点之一(当然缺点亦有)。之前看云风很久以前的博客写到过关于游戏地图数据使用文本方式存储,我大为赞同。经常见有些同学在网上问做socket通信,如何设计协议,文本协议?自定制二进制协议?Protobuf?AMF3?……其实现有常用协议已经给出了这个问题的答案,FTP/HTTP/DNS等协议都是文本协议,已久经历史的证明;除了像网游这种有一定保密性质的情况,用简单的文本协议绝对是明智之选;总之文本化的重要性怎样强调都不为过,可惜的是我见过的很多程序员对此并不知晓,或者将此视是为老古董的教条主义……

[Nick Holland]
* "it works"(够用)
* migrating - and not losing history is difficult.(迁移到其他版本控制系统很难保证不丢失历史记录)
* migrating versioning systems is something you don't want to do every
few weeks (or even every few years)...so you want to make sure it is
really worth it if/when you do.  SVN today?  GIT next week?  something
else next year?  Please, no.(迁移版本控制系统需要花费大量精力,没必要追新)
* Tolerable -- and in the case of opencvs, ideal -- license.(License许可证)
* its glitches are hated, but known (the devil you know how to subdue,
vs. the devil who beats the sh*t out of you)
* relatively light weight -- runs fine on a 486, hp300, or on a modern,
fast machine, fits nicely into existing distribution, easy to drop into
a chroot.(轻量,能在486这样的低配机器上运行,并且很容易对其chroot。Btw: 安全对于OpenBSD意味着什么?)
* Infrastructure exists.  To change it all would require a really good
reason.(现有的基础设施)
* it fits the OpenBSD development model.(适合OpenBSD的开发模式)
* Many of the "features" of alternatives are not desired in the OpenBSD
development model.(其他替代产品的特性并不是OpenBSD开发模式渴望的)

Obviously, it is possible to build a quality-focused product of
Operating System magnitude using CVS.  I don't think one can quite say
CVS is the REASON for OpenBSD's quality, but it obviously hasn't hurt.
很明显,使用CVS是为了构建高质量的操作系统,但是我不认为CVS是OpenBSD高质量的原因,但它显然没有害处。


  新技术的更替层出不穷,经常在网上看到某某大型项目从一个工具迁移到另一个工具,比如KDE从GNU Autotools迁移到cmake,于是掀起了废Autotools的争论,大量项目随后效仿迁移到cmake;Linux Kernel自家搞起的git,随后git一发不可收拾,github大火,人人都在学git,再加上网上各种技术狂热分子之势,似乎现在不用git管代码都不好意思说出口……

  看完这些回复突然感觉似乎悟到了些什么。OpenBSD总给人一种很古老、刻板的感觉,但它的代码是那样的整洁,具有美感。我不止一次的向那些想看C库函数如何实现而抱着glibc代码啃的同学推荐OpenBSD/FreeBSD的C库代码实现。在技术浮躁的今下,OpenBSD为我们做出了最好的榜样。只用够用的,没有足够的好处绝对没有改变的必要,理性的看待新事物。很多时候新事物只不过是在旧事物上加了一个美丽的外表而已,但却让你看不到本质了。

  自毕业工作几年来自己的最大改变之一也是不再向以前那样知道一个新技术就感觉热血沸腾,总想将其用起来,逐渐学会了分析自己所需的是什么,透过那些新技术华丽的外衣看到它的本质是什么;从最初的autotools/cmake/scons……最终悟到还是手写的makefile最淳朴、实用;从最初的想搞明白C++的所有东西到发现C是那样的淳朴、实用,顺应程序员和机器本该有的思维方式;从最初疯狂定制emacs的各种插件到只设置下tab宽度而已的.emacs;从最初的为editor/IDE挑选各种高亮配色到发现总是没有一个让自己感到十全十美能用一辈子的配色,逐渐发现vt100黑白终端模式的清晰与简洁……我想这大概算是种沉淀吧,今天看到这帖子特有此感,希望我的这些感触能对看此文的同学有所帮助。

OpenBSD为何还在用CVS之感的更多相关文章

  1. CVS 相关内容

    CVS 基础 cvs 并不是 eclipse 独有, 而是 eclipse 支持 cvs. cvs 是用于几个程序员之间共享程序避免冲突的一个工具, 是 C/S 架构. cvs 是 java 的一个开 ...

  2. Linux 内核的代码仓库太不一样了,光克隆都让我挠头,克隆后居然还丢文件,你肯定也会遇到!!!

    一个肯定能让你节省几个小时的小知识 大家好,我是 小猿来也,一个人称撸(划)码(水)小能手的程序猿. 最近一段时间,每次经过旁边大佬工位,总是发现他在快速的切屏,不知道在搞什么?难道他发现了快乐星球? ...

  3. maven 简介

    本书代码下载 大家可以从我的网站下载本书的代码:http://www.juvenxu.com/mvn-in-action/,也可以通过我的网站与我取得联系,欢迎大家与我交流任何关于本书的问题和关于Ma ...

  4. Maven的安装、配置及使用入门

    Maven的安装.配置及使用入门 本书代码下载 大家可以从我的网站下载本书的代码:http://www.juvenxu.com/mvn-in-action/,也可以通过我的网站与我取得联系,欢迎大家与 ...

  5. jenkins之从0到1利用Git和Ant插件打war包并自动部署到tomcat(第五话):总结以及build.xml文件

    前面基本上把整个配置过程都完整地串起来了,包括可能遇到的难点,按照那个套路应该可以配置好自动打包发布的功能.简单总结下我的学习过程,以及遇到问题是怎样解决的. 准备一个项目源码 刚开始在github和 ...

  6. 持续集成工具hudson

     2008-07-08  一.什么是持续集成 持续集成的核心概念 CI 过程会经常构建软件组件:在许多情况下,每当源代码存储库(比如 Subversion 或 ClearCase)中的代码发生变化时, ...

  7. 转载maven安装,配置,入门

    转载:http://www.cnblogs.com/dcba1112/archive/2011/05/01/2033805.html 本书代码下载 大家可以从我的网站下载本书的代码:http://ww ...

  8. 【AR实验室】ARToolKit之概述篇

    0x00 - 前言 我从去年就开始对AR(Augmented Reality)技术比较关注,但是去年AR行业一直处于偶尔发声的状态,丝毫没有其"异姓同名"的兄弟VR(Virtual ...

  9. OpenCASCADE Root-Finding Algorithm

    OpenCASCADE Root-Finding Algorithm eryar@163.com Abstract. A root-finding algorithm is a numerical m ...

随机推荐

  1. paper 112:hellinger distance

    在概率论和统计理论中,Hellinger距离被用来度量两个概率分布的相似度.它是f散度的一种(f散度——度量两个概率分布相似度的指标).Hellinger距离被定义成Hellinger积分的形式,这种 ...

  2. ftp 530 This FTP serveris anonymous only,

    引用:http://blog.sina.com.cn/s/blog_7e16680c01018ox1.html 三.遇到的问题 1.只允许匿名用户登录 现象:ftp连接过程中,提示输入用户名,输入本机 ...

  3. html5,进度条

    <form action="" id="myform">        <progress value="20" max= ...

  4. Eclipse下Tomcat插件的安装

    在Eclipse下安装Tomcat插件使开发,编译,发布变的相当的简单,下面就说一下安装的过程,很简单的: 1.先下载一个tomcat插件 地址:http://www.eclipsetotale.co ...

  5. Arcgis Server 默认服务端口号修改方法

    本人安装Arcgis Server 10.2之后发布了一个地图服务,该服务默认使用的端口号是6080,本人使用的是教育网,使用教育网均能正常使用该服务,但是使用电信或者移动网络均不能正常访问该网站. ...

  6. java ftp下载文件

    1.使用官方正规的jar commons-net-1.4.1.jar jakarta-oro-2.0.8.jar 注意:使用ftp从windows服务器下载文件和从linux服务器下载文件不一样 2. ...

  7. adpatch options=hotpatch

    --no need to shutdown application and no need to enable maintenance mode adpatch options=hotpatch fi ...

  8. A New Effect About My Plugin render

  9. 【转】 #1451 - Cannot delete or update a parent row: a foreign key constraint fails 问题的解决办法

    转载地址:http://blog.csdn.net/donglynn/article/details/17056099 错误 SQL 查询: DELETE FROM `zmax_lang` WHERE ...

  10. YOU KNOW NOTHING , SNOW

    JVM运行时数据区域 方法区: 用 于存储虚拟机加载的类信息,常量,静态变量,JIT编译后的代码,所有线程共享 堆:所有线程共享,用来存储实例对象. 虚拟机栈:线程私有,生命周期与线程相同,每个方法被 ...