JavaScript Git 的 Kickstarter 项目仅 28 小时达到集资目标

阅读数:2379 2013 年 3 月 27 日

话题:JavaScriptGit语言 & 开发

Tim Caswell是多个 JavaScript 和Node.js社区的知名成员,他提出了一个使用 JavaScript 来重新实现Git的建议。并将该项目放到了 Kickstarter(译者注:Kickstarter 是一个对个人创意项目进行公众集资(捐赠)从而获得资金支持的网络平台)上进行集资,结果仅仅在 28 小时内就获得了超过 360 人的资助。该项目再一次应证了Atwood 定律:“但凡可以用 JavaScript 编写的应用,最终都会有 JavaScript 编写出来的实现。”

InfoQ 通过与 Tim 的对话对该项目进行了更深入地了解。

JSGIT项目的想法从何而来?

我一直在寻找一种适合在我自己设备上编程的新方式。最近有个微软的朋友送了我一个Surface RT ,前一个项目留下的一对iPad,以及我最近买的一个ChromeBook Pixel。这些都是很有意思的设备,但是令我非常郁闷的是他们都有锁定限制并且对于在设备上的开发支持非常不友好。有一个平台没有人敢对其锁定,甚至是 Apple,这就是浏览器环境中的 JavaScript。你可以在该环境中生成并执行代码,你也可以访问本地存储,并且可以通过互联网上传或下载数据。

Cloud9平台上工作了一年后,我意识到基于浏览器的 IDE 在现今将成为可能。唯一的问题是 Cloud9 没有很好的解决离线问题。我希望的是可以将我的 Git 仓库复制到我本地的设备中,当我在海外飞行时(或者身处于我家后院深处时)可以离线工作。并且当我回到互联网的怀抱后,可以将我的修改 push 回我的公共 Git 仓库。

由于 JavaScript 是唯一一个随处可用的平台,所以我决定并且真的要将 Git 移植到 JavasScript 平台。

你认为JSGit将会有哪些使用场景,是否只是基于浏览器的IDE和编辑器,还是将会有更广泛地应用?

我个人的主要用途是基于浏览器的编程环境,但是很多人也表达了对于其他用途的兴趣,比如一个纯 JavaScript 的针对 Node.js 的 Git 客户端和服务器。Git 是很多部署系统中的一个通用组件,实现具有针对 Node.js 的 Git 服务器和客户端来对 Git 进行细粒度控制,将会给很多人带来帮助。

你认为它的性能将会如何?

JavaScript 本身是相当快的,我最近使用 JavaScript 写了一些非常快的 hash 函数(MD5,SHA1,SHA256), 在我的桌面浏览器里可以达到每秒 500,000 次 MD5 hash 的速度。因为复制一个 Git 仓库是很慢的,即使你在一台很快的笔记本上使用原生客户端,对于大型的仓库来说都是非常慢的,我也不期望 JS 版本的 Git 能解决这个问题。但是对于小型的仓库,我希望它是足够快的。

为什么不采用Emscripten这样的工具将C实现的Git进行交叉编译,而选择使用JavaScript从无到有的重新实现每一项功能?

我打算对此做进一步的研究,但是从我对这个领域的初步调查来看,我预见到两个问题。首先,Emscripten 是一个代码生成器。它会生成非常大量的代码并最终形成一个直接的移植版本,除非你手动地调整大部分代码。其次,查看 Git 的各种 C 实现,它们通常是与底层文件系统和网络调用紧密耦合的。这就需要我们对某个基于浏览器版本的 Git 进行重型定制。因为每个 web 平台都有其自有的文件存储 API,这将需要我为多个 web 平台手写文件系统的抽象。

目前已经有CJava和其他语言等多个Git实现,你觉得使用JavaScript实现Git将会面临哪些特别的挑战?

我在使用 JavaScript 实现加密相关的功能方面相当有经验,所以我不认为这是一个问题。但是需要实现的代码总量之大将会是个问题。我计划把工作重点先放在那些最基本的重要功能上,然后不断完善直到花光我的时间。

为什么现在才发起这个项目?是不是某些特别的HTML5技术使得现今具备了该项目的可行性?

这其中更多的因素与硬件有关。现在越来越多的设备具备了长时间的电池寿命以及较大的屏幕,但是开发体验却非常的糟糕。

你的项目在一天多内就得到了小规模的资助,你打算使用这些即将收到的资金来构建哪些功能?

正如我在拓展目标中所预估的,我希望先实现重要的 Git 功能。如果有时间,将会实现对多种平台的集成。

为什么会想到使用Kickstarter平台?

这在当时这听起来像是个不错的主意。到目前为止它都进行的很好,尽管在通读了所有 Kickstarter 的规则后,我仍然感觉到像这种类型的项目勉强能符合他们心中的理想项目。

你是否认为更多的(JavaScript)开源项目应该尝试上Kickstarter进行集资呢?

我现在还不知道,这只是一个实验。我确实很喜欢这种概念,就是在你为某个想法花费几个月的时间实践之前,可以通过创意甄选从而获得支持。我曾经在过去的几个项目中花费了几百个小时的业余时间,但最后却发现社区对他们几乎没什么兴趣。我真的喜欢全职为一些大家想要的而且非常酷的项目而工作。我不知道 Kickstarter 的这个项目是否可以长期这样进展下去,但是即使不会我也会继续寻找其他适合的点子。

JSGit 并不是首个在 Kickstarter 上成功达到集资目标的 JavaScript 相关项目。以前类似的项目还包括一本关于异步 JavaScript 编程的书测试驱动 JavaScript 的一个视频系列。不管怎样,JSGit 是首个用于生产 JavaScript 代码库的 Kickstarter 项目。

项目开放接受集资至 2013 年 3 月 30 日。Tim 希望在接受集资截止日到期后立即开展该项目的工作。

查看英文原文http://www.infoq.com/news/2013/03/git-in-javascript