复刻:为 fork 的中文翻译定名

作者: wxy 译者:

| 2016-10-20 08:08:00   评论: 19

使用过 GitHub 的人大多知道它上面有个“Fork”的功能,用来将某个仓库克隆到你的账户之下,从而可以对其进行修改、衍生,也可以比较方便的将你的修改推回到原来的仓库(所谓的上游)。

随着 GitHub 的流行,我们经常能在各种文章中见到,“fork 某某项目”等说法,是的,“fork”这个一直没有一个正式的译名。

其实这个问题不独出现在 GitHub 中,fork 这个词更早的出现在 Unix/Linux 中的 C 语言编程之中。在 Unix/Linux 的进程模型中,fork 是指进程创建自身副本的操作,它通常是一个在内核中实现的系统调用。fork 是 Unix 类系统中进程创建的主要方式(历史上曾经是唯一的方式)。从那个时候起,fork 就一直没有一个确定的译名。

不过,我们认为,对于这样的一个经常使用的专业名词,有一个明确的译名比较适合,虽然大家都习惯了直接用 fork 一词。

fork 一词在英文中的原意是“叉子”, 虽然翻译成“分叉”、“分支”似乎也可以,但是前者较少用做动词,后者则和 Branch 的译名重复混淆。

据 Linux 中国翻译组(LCTT)的译者 dongfengweixiao 提议,可译作“复刻”,我们认为这是一个可取的译法,一方面照顾到了音译,另一方面其释义也形象直观。

补充 1,“复刻”这样的译法,在网络上已存在,包括中文维基中也采用该译法,只是并未得到公认和流行。

补充 2,据 @爱开源魅影 称,git 软件包里面,蒋新将“fork”译为“派生”。似也可取。

既然说到这里,顺便我们对 复刻 fork 做一个技术方面的简介吧。

复刻 fork GitHub 仓库

在 GitHub 上评价一个项目(仓库)是否流行,其中一个重要指标就是其 复刻 fork 数。

在 GitHub 上参与一个开源项目的程度有三个阶段:

  • star(点赞),如果你觉得某个项目不错,可以为其点赞(star)
  • watch(关注),如果你希望进一步关注这个项目的进展,可以关注(watch)它
  • fork(复刻),如果你还想进一步为这个项目做一些贡献,可以复刻(fork)它到你自己的账户下,做出了修改之后通过 Pull-Request(PR)方式将你的改动推回给原仓库(上游),如果被接纳就会进入到原仓库之中

显然,一个项目的复刻数越高,代表着贡献者越多。

通过 复刻 fork + PR 的方式对开源项目进行贡献的流程类似下图:

我们知道 GitHub 是运行在 Git 之上的,GitHub 中的 复刻 fork 其本质上是 Git 中的 克隆 clone 。关于 GitHub 中的复刻的进一步介绍,可以参考“在 Github 和 Git 上 fork 之简单指南”一文。

顺便说一句,我们的 LCTT 翻译组就是通过 复刻 fork + PR 的方式运作的,这也是 GitHub 上绝大多数开源项目的运作方式。

复刻 fork 子进程

在 Unix 下的 C 语言编程中,通过 fork() 系统调用来对进程本身进行复制,然后被复制出来的子进程就可以执行不同于父进程的操作,或通过 exec() 运行其它进程。典型的 C 代码如下:

fpid = fork();   

if (fpid < 0)   
    printf("error in fork!");   
else if (fpid == 0) {  
    printf("i am the child process, my process id is %d/n",getpid());   
} else {  
    printf("i am the parent process, my process id is %d/n",getpid());   
}

所有的服务器守护进程,包括你所见到的 Web 服务、MySQL 数据库服务等,都是通过这种方式来产生子进程来提供服务的。甚至,整个 Linux/Unix 中的进程,除了 init 进程本身之外,都是由 init 进程 复刻 fork 出来的。关于服务器编程方面的 复刻 fork 的使用,可以进一步参阅“搭个 Web 服务器(三)”一文。

复刻 fork 炸弹

其实,不只是 C 语言里面有 复刻 fork 的功能,在 shell 里面也有,想必大家可能都听说过 “fork 炸弹”,这就是利用函数的迭代执行,无限 复刻 fork 出许多子进程,从而耗尽系统资源,导致系统崩溃的一个恶意(玩笑)用法。

复刻炸弹有很多种形式,不过最简洁的可能就是如上图的这个了,关于这个炸弹的具体解释,可以参阅“经典的 Fork 炸弹解析”,在此就不赘述了。

如果你对 fork 的翻译有不同的意见,欢迎留言评论。



最新评论

linccn [Firefox 49.0|Windows 7]  2016-11-08 10:21
求你饶过这么一个简单的词吧!“香波”很好吗?
来自江苏南通的 Chrome 54.0|Mac 10.12 用户  2016-10-24 09:25
“复刻”字面上看有不改变的意思,不适合这种翻译。“派生”字面上看没有不改变的意思。随着科技进步新名词不断出现,旧名词不断有新的含义,就让我为这个fork重新翻译一次吧!代码分支用“复开”!---------我在吹牛,请无视。
来自河北石家庄的 Chrome Mobile 54.0|Android 6.0 用户  2016-10-22 07:49
好像以前一直翻译为‘派生’,不是已经很好了吗,‘’复刻‘’真难听。是不是实在没别的事做了,只能靠造词过日子了。
拿铁不加糖 [Chrome 54.0|Windows 10]  2016-10-20 23:43
派生不错,汉语博大精深,意译也是不错的选择!
来自湖南长沙的 Chrome 54.0|GNU/Linux 用户  2016-10-20 23:25
不太建议用复刻,,git上的fork译成“派生”显然更好,unix函数里面那个fork译成复刻显然更加奇怪。。

事实上游戏行业早就大规模用复刻这个词了,通常指老游戏在不改变玩法和游戏性的前提下出新版本(一般是兼容新系统或者升级画面)。
linux [Chrome 53.0|Mac 10.11]  2016-10-20 20:10
事实上,就是起到了这个作用。
linux [Chrome 53.0|Mac 10.11]  2016-10-20 20:09
确实也有这个意思,而且两个意思相去有点远。
linux [Chrome 53.0|Mac 10.11]  2016-10-20 20:06
术语表是有,但是失于维护,并没有及时跟进文章中的翻译。事实上,大部分没有争议或常见的词汇,我们都不会单独标出,只有有争议,或没有约定俗称译法的,我们会以 ruby 标签的方式标出。
来自湖北黄冈的 Chromium 53.0|Ubuntu 用户  2016-10-20 19:47
您好, linux.cn 上一些术语标有英文对照. 是否有整理好的中英文对照表. 可否发布在 Github 上. 这样翻译的时候会方便一些, 谢谢
拿铁不加糖 [Chrome 54.0|Windows 10]  2016-10-20 13:53
复刻有点说是一个年代很久的经典产品重新制造生产的意思。
来自117.182.151.71的 Chrome 53.0|Windows 7 用户  2016-10-20 12:50
复刻很好,就用这个
来自上海的 Sina Weibo 6.9|Android 4.2 用户  2016-10-20 12:43
Star 是点赞?我呵呵。。。
不懂就别瞎bb。。
linux [Chrome 53.0|Mac 10.11]  2016-10-20 11:15
我对此的看法是:
1、对于新出现的、使用频度较少的名词,可以暂时采用英文原文;
2、对于属于特定厂家的名词,比如 docker ,如果官方没有正式译名,就维持英文原文。而有了正式译名,比如红帽,就采用官方译名;
3、对于通用的名词,比如 Container,则进行翻译;

常用的,意义确定的名词,应该结合原意、发音来确定一个信雅达的翻译。
如果不翻译,何不保留所有英文名词?那就会和港台人说话一样,中英文混杂,还不如全用英文呢。
linux [Chrome 53.0|Mac 10.11]  2016-10-20 11:09
古义词是什么?
linux [Chrome 53.0|Mac 10.11]  2016-10-20 11:08
请来参加 LCTT 。
来自江苏南京的 Chromium 53.0|Ubuntu 用户  2016-10-20 10:54
翻译啥,就用英语挺好的,都懂
delectate [Firefox 49.0|Windows 10]  2016-10-20 10:12
嗯,比昨天那个“分叉了”好听多了。
来自广东深圳的 Chrome 54.0|Windows 7 用户  2016-10-20 09:36
听着就很别扭,感觉就是为了翻译而翻译。

有时间折腾这些,不如多花掉时间翻译优秀资料,这样对社区贡献更大。而不是在纠结茴香豆有几种写法。
来自上海的 Chrome 52.0|Windows 7 用户  2016-10-20 09:01
复刻太正式,太正规, 希望搞一个轻快上口的翻译, 个人建议参考古义词

友情链接
返回顶部