一个轻松无聊的晚上突然想到一个问题——在当今这个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. select2插件的使用

    <select id="prd_tech_for_load" class="selectable" style="width:180px;&qu ...

  2. Windows Server 2008 R2 创建辅助DNS服务器并接管主要DNS服务器

    公司需求: Zhuyu公司局域网有一台主要DNS服务器,经领导讨论需要规划安装一台辅助DNS服务器备用. 功能需求: 当主要DNS服务器宕机或系统崩溃,辅助DNS服务器能接管主要DNS服务器工作,并且 ...

  3. RAC One Node转换为RAC

    1.查看状态 [oracle@rone1 ~]$ srvctl config database -d rone Database unique name: rone Database name: ro ...

  4. ios检测是否有网络

    /** AFNetworkReachabilityStatusUnknown          = -1,  // 未知 AFNetworkReachabilityStatusNotReachable ...

  5. How to use PEM of PPAS

    -bash-4.1$ pwd/opt/PostgresPlus/9.3AS/client-v4/scripts -bash-4.1$ lsclient launchPEMClient.sh -bash ...

  6. Java语言的特点

    一. 面向对象:其实是现实世界模型的自然延伸.现实世界中任何实体都可以看作是对象.对象之间通过消息相互作用.另外,现实世界中任何实体都可归属于某类事物,任何对象都是某一类事物的实例.如果说传统的过程式 ...

  7. C语言回顾-函数和位运算

    1.函数的概述 功能独立的代码块 C语言由若干函数组成 1)从定义分,库函数和用户定义函数两种 2)从返回值分,有返回值函数和无返回值函数 3)从参数分,无参函数和有参函数 2.形参和实参 1)形参定 ...

  8. [3]R语言在数据处理上的禀赋——par参数详解(一)

    本文目录 公共参数列表 par 颜色相关 字体相关 字体大小相关 线条相关 符号相关 线条和符号大小相关 结束 本文首发:program-dog.blogspot.com 注1:本文也曾在csdn发布 ...

  9. ASP.NET WEBAPI 简单CURD综合测试(asp.net MVC,json.net,sql基础存储过程和视图,sqlhelper,json解析)

    草图   真正的后端是不管前端是什么平台,用什么语言的,JSON格式的数据应该可以应对.用ASP.NET WEBAPI尝试做一个后端,实现最基本的CURD,业务逻辑和数据库操作都放在后端,前端只需要正 ...

  10. 一个Json结构对比的Python小工具兼谈编程求解问题

    先上代码. jsondiff.py #!/usr/bin/python #_*_encoding:utf-8_*_ import argparse import json import sys rel ...