GitHub的AI程序員“抄襲”算法大神代碼,連原版注釋都抄上了
卻忘了帶上開源許可證
曉查 發(fā)自 凹非寺?
量子位 報(bào)道 | 公眾號 QbitAI
本周GitHub官方和OpenAI聯(lián)合發(fā)布了一款代碼神器AI——GitHub Copilot,只需輸入注釋,即可自動(dòng)生成代碼,堪稱一位“AI程序員”。真人程序們表示非常激動(dòng)。
它究竟有多厲害呢?有位程序員嘗試了一下平方根倒數(shù)速算法(Fast Inverse Square Root),結(jié)果出人意料。
只是打出來這四個(gè)關(guān)鍵詞,GitHub Copilot就逐行“完美復(fù)刻”了當(dāng)年那段神奇的算法。

這是當(dāng)年在游戲《雷神之錘3》(Quake 3)中使用的一段代碼,用于計(jì)算歸一化向量,因其算法之簡潔快速而聞名,也被叫做Quake代碼。
我們再對比一下這兩串代碼,不能說是十分相似,只能說是一模一樣。
float?Q_rsqrt(?float?number?)
{
????long?i;
????float?x2,?y;
????const?float?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;
}
△?原版平方根倒數(shù)速算法
甚至GitHub Copilot連當(dāng)年那句“what the fuck”的注釋也用上了。
這不禁讓人細(xì)思極恐:難道這不侵犯版權(quán)嗎?
還真是!這位程序員發(fā)現(xiàn),GitHub Copilot好像忘了開源許可證,這就尷尬了。
而Quake代碼十年前就在GitHub上開源了,在Readme文檔中,原作者明確表示使用的是GPL開源許可證。
GPL許可證要求:如果分發(fā)包含GPL代碼的新版程序,則需要向每個(gè)人都提供免費(fèi)獲得的完整源代碼。
所以這位程序員只好在代碼前手動(dòng)加入了幾行注釋,算是給他人的警示吧。

使用Copilot有抄襲風(fēng)險(xiǎn)
關(guān)于GitHub Copilot直接“抄襲”Quake代碼的事情,在Hacker News論壇上引起熱議。
對此,程序員表示,如果貿(mào)然使用GitHub Copilot,而忽略了代碼背后開源許可證,那么你有可能會(huì)被起訴。
一家科技公司的產(chǎn)品安全負(fù)責(zé)人明確表示:禁止員工使用GitHub Copilot。
如果不開源的商用軟件使用GitHub Copilot開發(fā)的代碼,而沒有按照開源許可證的要求執(zhí)行,就會(huì)給公司招來法律風(fēng)險(xiǎn)。
不過,也有程序員表示,我用AI寫的程序關(guān)我什么事,有責(zé)任那也是GitHub母公司微軟的。
但是在GitHub Copilot下載頁面中并沒有相關(guān)法律風(fēng)險(xiǎn)的提示,而且GitHub還表示這個(gè)AI不是一個(gè)“背題家”,它生成的絕大多數(shù)代碼都是唯一的。
在0.1%的情況下,GitHub Copilot建議可能包含一些來自訓(xùn)練集的逐字片段。

結(jié)果GitHub Copilot卻把人家整段的代碼都抄來了,而且連注釋都附帶上。
還有程序員表示,不用太擔(dān)心。其實(shí)GitHub Copilot的這種行為,和某些程序員直接抄Stack Overflow的代碼沒有啥區(qū)別,因?yàn)楹芏郤tack Overflow上的代碼也沒有給出許可證信息。很多直接搬運(yùn)Stack Overflow代碼的行為也沒有被起訴。
但是謹(jǐn)慎起見,用GitHub Copilot還是長點(diǎn)心吧。
One More Thing
最后關(guān)于Quake代碼這件事,還值得再說兩句。
由于當(dāng)年顯卡等圖形渲染硬件的配置較低,為了能實(shí)現(xiàn)更好的光照效果,必須對算法進(jìn)行極致優(yōu)化,而求平方根倒數(shù)是繞不開的一項(xiàng)運(yùn)算,每秒要進(jìn)行上百萬次。

因此就有一位算法大神,通過浮點(diǎn)數(shù)與整型的轉(zhuǎn)換,以及移位操作,成功將求平方根倒數(shù)壓縮到短短幾次操作。(詳細(xì)原理可參照維基百科介紹)
關(guān)于這個(gè)算法究竟是誰發(fā)明的,一直眾說紛紜,沒有定論。但那句注釋讓Quake代碼更加出名。
當(dāng)年開發(fā)《雷神之錘3》的程序員使用了大神的算法,卻沒有看懂其中的精髓:“i = 0x5f3759df – ( i >> 1 ); ”這一句 ,所以只好在注釋里寫下了“what the fuck”。
沒想到近20年后,AI還是和人一樣成了復(fù)讀機(jī),只能膜拜算法大神了。(手動(dòng)狗頭)
參考鏈接:
[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



