复刻：为 fork 的中文翻译定名
据 Linux 中国翻译组（LCTT）的译者 dongfengweixiao 提议，可译作“复刻”，我们认为这是一个可取的译法，一方面照顾到了音译，另一方面其释义也形象直观。
fork 复刻
180.166.137.78
复刻太正式，太正规， 希望搞一个轻快上口的翻译， 个人建议参考古义词
来自上海的 Chrome 52.0|Windows 7 用户
2016-10-20T09:01:34.000
14.17.22.32
听着就很别扭，感觉就是为了翻译而翻译。<br />
<br />
有时间折腾这些，不如多花掉时间翻译优秀资料，这样对社区贡献更大。而不是在纠结茴香豆有几种写法。
来自广东深圳的 Chrome 54.0|Windows 7 用户
2016-10-20T09:36:41.000
14.204.32.235
嗯，比昨天那个“分叉了”好听多了。
delectate [Firefox 49.0|Windows 10]
2016-10-20T10:12:41.000
218.94.117.234
翻译啥，就用英语挺好的，都懂
来自江苏南京的 Chromium 53.0|Ubuntu 用户
2016-10-20T10:54:03.000
123.120.86.138
请来参加 LCTT 。
linux [Chrome 53.0|Mac 10.11]
2016-10-20T11:08:44.000
123.120.86.138
古义词是什么？
linux [Chrome 53.0|Mac 10.11]
2016-10-20T11:09:11.000
123.120.86.138
我对此的看法是：<br />
1、对于新出现的、使用频度较少的名词，可以暂时采用英文原文；<br />
2、对于属于特定厂家的名词，比如 docker ，如果官方没有正式译名，就维持英文原文。而有了正式译名，比如红帽，就采用官方译名；<br />
3、对于通用的名词，比如 Container，则进行翻译；<br />
<br />
常用的，意义确定的名词，应该结合原意、发音来确定一个信雅达的翻译。<br />
如果不翻译，何不保留所有英文名词？那就会和港台人说话一样，中英文混杂，还不如全用英文呢。
linux [Chrome 53.0|Mac 10.11]
2016-10-20T11:15:28.000
180.169.120.34
Star 是点赞？我呵呵。。。<br />
不懂就别瞎bb。。
来自上海的 Sina Weibo 6.9|Android 4.2 用户
2016-10-20T12:43:45.000
117.182.151.71
复刻很好，就用这个
来自117.182.151.71的 Chrome 53.0|Windows 7 用户
2016-10-20T12:50:02.000
125.34.1.45
复刻有点说是一个年代很久的经典产品重新制造生产的意思。
拿铁不加糖 [Chrome 54.0|Windows 10]
2016-10-20T13:53:22.000
171.112.180.237
您好, linux.cn 上一些术语标有英文对照. 是否有整理好的中英文对照表. 可否发布在 Github 上. 这样翻译的时候会方便一些, 谢谢
来自湖北黄冈的 Chromium 53.0|Ubuntu 用户
2016-10-20T19:47:33.000
123.120.86.138
术语表是有，但是失于维护，并没有及时跟进文章中的翻译。事实上，大部分没有争议或常见的词汇，我们都不会单独标出，只有有争议，或没有约定俗称译法的，我们会以 ruby 标签的方式标出。
linux [Chrome 53.0|Mac 10.11]
2016-10-20T20:06:47.000
123.120.86.138
确实也有这个意思，而且两个意思相去有点远。
linux [Chrome 53.0|Mac 10.11]
2016-10-20T20:09:42.000
123.120.86.138
事实上，就是起到了这个作用。
linux [Chrome 53.0|Mac 10.11]
2016-10-20T20:10:13.000
58.20.82.151
不太建议用复刻，，git上的fork译成“派生”显然更好，unix函数里面那个fork译成复刻显然更加奇怪。。<br />
<br />
事实上游戏行业早就大规模用复刻这个词了，通常指老游戏在不改变玩法和游戏性的前提下出新版本（一般是兼容新系统或者升级画面）。
来自湖南长沙的 Chrome 54.0|GNU/Linux 用户
2016-10-20T23:25:49.000
118.247.157.237
派生不错，汉语博大精深，意译也是不错的选择！
拿铁不加糖 [Chrome 54.0|Windows 10]
2016-10-20T23:43:41.000
183.198.62.154
好像以前一直翻译为‘派生’，不是已经很好了吗，‘’复刻‘’真难听。是不是实在没别的事做了，只能靠造词过日子了。
来自河北石家庄的 Chrome Mobile 54.0|Android 6.0 用户
2016-10-22T07:49:16.000
114.232.245.148
“复刻”字面上看有不改变的意思，不适合这种翻译。“派生”字面上看没有不改变的意思。随着科技进步新名词不断出现，旧名词不断有新的含义，就让我为这个fork重新翻译一次吧！代码分支用“复开”！---------我在吹牛，请无视。
来自江苏南通的 Chrome 54.0|Mac 10.12 用户
2016-10-24T09:25:24.000
106.37.95.238
求你饶过这么一个简单的词吧！“香波”很好吗？
linccn [Firefox 49.0|Windows 7]
2016-11-08T10:21:26.000
据 Linux 中国翻译组（LCTT）的译者 dongfengweixiao 提议，可译作“复刻”，我们认为这是一个可取的译法，一方面照顾到了音译，另一方面其释义也形象直观。
使用过 GitHub 的人大多知道它上面有个“Fork”的功能，用来将某个仓库克隆到你的账户之下，从而可以对其进行修改、衍生，也可以比较方便的将你的修改推回到原来的仓库（所谓的上游）。


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


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


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


![](/data/attachment/album/201610/19/231239zo9ouougoaxg72qq.jpg)


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


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


*补充 1，“复刻”这样的译法，在网络上已存在，包括[中文维基](https://zh.wikipedia.org/wiki/复刻_(软件工程))中也采用该译法，只是并未得到公认和流行。*


*补充 2，据 @爱开源魅影 称，[git 软件包里面](https://github.com/git/git/blob/master/po/zh_CN.po)，蒋新将“fork”译为“派生”。似也可取。*


既然说到这里，顺便我们对<ruby> 复刻 <rp>  （ </rp> <rt>  fork </rt> <rp>  ） </rp></ruby>做一个技术方面的简介吧。


### <ruby> 复刻 <rp>  （ </rp> <rt>  fork </rt> <rp>  ） </rp></ruby> GitHub 仓库


在 GitHub 上评价一个项目（仓库）是否流行，其中一个重要指标就是其<ruby> 复刻 <rp>  （ </rp> <rt>  fork </rt> <rp>  ） </rp></ruby>数。



> 
> 在 GitHub 上参与一个开源项目的程度有三个阶段：
> 
> 
> * star（点赞），如果你觉得某个项目不错，可以为其点赞（star）
> * watch（关注），如果你希望进一步关注这个项目的进展，可以关注（watch）它
> * fork（复刻），如果你还想进一步为这个项目做一些贡献，可以复刻（fork）它到你自己的账户下，做出了修改之后通过 Pull-Request（PR）方式将你的改动推回给原仓库（上游），如果被接纳就会进入到原仓库之中
> 
> 
> 


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


通过<ruby> 复刻 <rp>  （ </rp> <rt>  fork </rt> <rp>  ） </rp></ruby> + PR 的方式对开源项目进行贡献的流程类似下图：


![](/data/attachment/album/201610/19/224655weu0k5x8c8pz8r7e.png)


我们知道 GitHub 是运行在 Git 之上的，GitHub 中的<ruby> 复刻 <rp>  （ </rp> <rt>  fork </rt> <rp>  ） </rp></ruby>其本质上是 Git 中的<ruby> 克隆 <rp>  （ </rp> <rt>  clone </rt> <rp>  ） </rp></ruby>。关于 GitHub 中的复刻的进一步介绍，可以参考“[在 Github 和 Git 上 fork 之简单指南](/article-4292-1.html)”一文。


顺便说一句，我们的 [LCTT 翻译组](https://lctt.github.io/)就是通过<ruby> 复刻 <rt>  fork </rt></ruby> + PR 的方式运作的，这也是 GitHub 上绝大多数开源项目的运作方式。


### <ruby> 复刻 <rp>  （ </rp> <rt>  fork </rt> <rp>  ） </rp></ruby>子进程


在 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 进程<ruby> 复刻 <rp>  （ </rp> <rt>  fork </rt> <rp>  ） </rp></ruby>出来的。关于服务器编程方面的<ruby> 复刻 <rp>  （ </rp> <rt>  fork </rt> <rp>  ） </rp></ruby>的使用，可以进一步参阅“[搭个 Web 服务器（三）](/article-7847-2.html)”一文。


### <ruby> 复刻 <rp>  （ </rp> <rt>  fork </rt> <rp>  ） </rp></ruby>炸弹


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


![](/data/attachment/album/201610/19/231727pyy9mq8y7ooyeeel.jpg)


复刻炸弹有很多种形式，不过最简洁的可能就是如上图的这个了，关于这个炸弹的具体解释，可以参阅“[经典的 Fork 炸弹解析](/article-5685-1.html)”，在此就不赘述了。


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

