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

微信扫一扫,分享到朋友圈

复刻:为 fork 的中文翻译定名
收藏 0 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 的翻译有不同的意见,欢迎留言评论。

19 条评论

  1. 复刻太正式,太正规, 希望搞一个轻快上口的翻译, 个人建议参考古义词

  2. 听着就很别扭,感觉就是为了翻译而翻译。

    有时间折腾这些,不如多花掉时间翻译优秀资料,这样对社区贡献更大。而不是在纠结茴香豆有几种写法。

  3. 嗯,比昨天那个“分叉了”好听多了。

  4. 翻译啥,就用英语挺好的,都懂

  5. 请来参加 LCTT 。

  6. 古义词是什么?

  7. 我对此的看法是:

    1、对于新出现的、使用频度较少的名词,可以暂时采用英文原文;

    2、对于属于特定厂家的名词,比如 docker ,如果官方没有正式译名,就维持英文原文。而有了正式译名,比如红帽,就采用官方译名;

    3、对于通用的名词,比如 Container,则进行翻译;

    常用的,意义确定的名词,应该结合原意、发音来确定一个信雅达的翻译。

    如果不翻译,何不保留所有英文名词?那就会和港台人说话一样,中英文混杂,还不如全用英文呢。

  8. Star 是点赞?我呵呵。。。

    不懂就别瞎bb。。

  9. 复刻很好,就用这个

  10. 复刻有点说是一个年代很久的经典产品重新制造生产的意思。

  11. 您好, linux.cn 上一些术语标有英文对照. 是否有整理好的中英文对照表. 可否发布在 Github 上. 这样翻译的时候会方便一些, 谢谢

  12. 术语表是有,但是失于维护,并没有及时跟进文章中的翻译。事实上,大部分没有争议或常见的词汇,我们都不会单独标出,只有有争议,或没有约定俗称译法的,我们会以 ruby 标签的方式标出。

  13. 确实也有这个意思,而且两个意思相去有点远。

  14. 事实上,就是起到了这个作用。

  15. 不太建议用复刻,,git上的fork译成“派生”显然更好,unix函数里面那个fork译成复刻显然更加奇怪。。

    事实上游戏行业早就大规模用复刻这个词了,通常指老游戏在不改变玩法和游戏性的前提下出新版本(一般是兼容新系统或者升级画面)。

  16. 派生不错,汉语博大精深,意译也是不错的选择!

  17. 来自河北石家庄的 Chrome Mobile 54.0|Android 6.0 用户

    好像以前一直翻译为‘派生’,不是已经很好了吗,‘’复刻‘’真难听。是不是实在没别的事做了,只能靠造词过日子了。

  18. “复刻”字面上看有不改变的意思,不适合这种翻译。“派生”字面上看没有不改变的意思。随着科技进步新名词不断出现,旧名词不断有新的含义,就让我为这个fork重新翻译一次吧!代码分支用“复开”!---------我在吹牛,请无视。

  19. 求你饶过这么一个简单的词吧!“香波”很好吗?

发表评论

插入图片

最新评论

返回顶部