天天看点

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

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

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

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

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

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

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

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

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

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

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

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

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

<a target="_blank"></a>

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

<code>fpid = fork();</code>

<code></code>

<code>if (fpid &lt; 0)</code>

<code>printf("error in fork!");</code>

<code>else if (fpid == 0) {</code>

<code>printf("i am the child process, my process id is %d/n",getpid());</code>

<code>} else {</code>

<code>printf("i am the parent process, my process id is %d/n",getpid());</code>

<code>}</code>

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

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

原文发布时间为:2016-10-20

本文来自云栖社区合作伙伴“linux中国”

继续阅读