本周GitHub官方和OpenAI联合发布了一款代码神器AI——GitHub Copilot,只需输入注释,即可自动生成代码,堪称一位“AI程序员”。真人程序们表示非常激动。

它究竟有多厉害呢?有位程序员尝试了一下平方根倒数速算法(Fast Inverse Square Root),结果出人意料。

只是打出来这四个关键词,GitHub Copilot就逐行“完美复刻”了当年那段神奇的算法



这是当年在游戏《雷神之锤3》(Quake 3)中使用的一段代码,用于计算归一化向量,因其算法之简洁快速而闻名,也被叫做Quake代码。

我们再对比一下这两串代码,不能说是十分相似,只能说是一模一样。

floatQ_rsqrt( float number )

{

long i;

float x2, y;

constfloat threehalfs = 1.5F;

x2 = number * 0.5F;

y = number;

i = * ( long * ) &y; // evil floating point bit level hacking

i = 0x5f3759df - ( i >> 1 ); // what the fuck?

y = * ( float * ) &i;

y = y * ( threehalfs - ( x2 * y * y ) ); // 1st iteration

// y = y * ( threehalfs - ( x2 * y * y ) ); // 2nd iteration, this can be removed

return y;

}

△ 原版平方根倒数速算法

甚至GitHub Copilot连当年那句“what the fuck”的注释也用上了。

这不禁让人细思极恐:难道这不侵犯版权吗?

还真是!这位程序员发现,GitHub Copilot好像忘了开源许可证,这就尴尬了。

而Quake代码十年前就在GitHub上开源了,在Readme文档中,原作者明确表示使用的是GPL开源许可证。

GPL许可证要求:如果分发包含GPL代码的新版程序,则需要向每个人都提供免费获得的完整源代码。

所以这位程序员只好在代码前手动加入了几行注释,算是给他人的警示吧。



使用Copilot有抄袭风险

关于GitHub Copilot直接“抄袭”Quake代码的事情,在Hacker News论坛上引起热议。

对此,程序员表示,如果贸然使用GitHub Copilot,而忽略了代码背后开源许可证,那么你有可能会被起诉。

一家科技公司的产品安全负责人明确表示:禁止员工使用GitHub Copilot。

如果不开源的商用软件使用GitHub Copilot开发的代码,而没有按照开源许可证的要求执行,就会给公司招来法律风险。

不过,也有程序员表示,我用AI写的程序关我什么事,有责任那也是GitHub母公司微软的。

但是在GitHub Copilot下载页面中并没有相关法律风险的提示,而且GitHub还表示这个AI不是一个“背题家”,它生成的绝大多数代码都是唯一的。

在0.1%的情况下,GitHub Copilot建议可能包含一些来自训练集的逐字片段。



结果GitHub Copilot却把人家整段的代码都抄来了,而且连注释都附带上。

还有程序员表示,不用太担心。其实GitHub Copilot的这种行为,和某些程序员直接抄Stack Overflow的代码没有啥区别,因为很多Stack Overflow上的代码也没有给出许可证信息。很多直接搬运Stack Overflow代码的行为也没有被起诉。

但是谨慎起见,用GitHub Copilot还是长点心吧。

One More Thing

最后关于Quake代码这件事,还值得再说两句。

由于当年显卡等图形渲染硬件的配置较低,为了能实现更好的光照效果,必须对算法进行极致优化,而求平方根倒数是绕不开的一项运算,每秒要进行上百万次。



因此就有一位算法大神,通过浮点数与整型的转换,以及移位操作,成功将求平方根倒数压缩到短短几次操作。(详细原理可参照维基百科介绍)

关于这个算法究竟是谁发明的,一直众说纷纭,没有定论。但那句注释让Quake代码更加出名。

当年开发《雷神之锤3》的程序员使用了大神的算法,却没有看懂其中的精髓:“i = 0x5f3759df - ( i >> 1 ); ”这一句 ,所以只好在注释里写下了“what the fuck”。

没想到近20年后,AI还是和人一样成了复读机,只能膜拜算法大神了。(手动狗头)

参考链接:

[1]https://twitter.com/mitsuhiko/status/1410886329924194309

[2]https://news.ycombinator.com/item?id=27710287

[3]https://github.com/id-Software/Quake

[4]https://en.wikipedia.org/wiki/Fast_inverse_square_root#History