微軟上個月才開源的WinGet竟是抄襲來的?
鏈接:
https://my.oschina.net/editorial-story/blog/4300683
近日,開源項目 AppGet 作者 Keivan Beigi 與微軟 WinGet 項目的“抄襲糾紛”事件迎來了最新進展。微軟方面做出回應,坦承“辜負了 Keivan 和 AppGet”,並肯定了 Keivan 與 AppGet 對微軟新項目的貢獻。
今年 5 月,微軟在 Build 2020 大會上發佈了新的軟件包管理工具 WinGet,並將其開源。而就在 WinGet 發佈之後不久,開源軟件包管理工具 AppGet 項目作者 Keivan Beigi 發文宣佈 AppGet 項目“死亡”,矛頭直指微軟的 WinGet 抄襲了 AppGet 。
AppGet 是一款開源的 Windows 軟件包管理工具,它可以在 Windows PC 上自動安裝軟件。作者 Keivan Beigi 是一名居住在加拿大温哥華的軟件工程師。去年 7 月,微軟 App 事業部產品經理 Andrew Clinick 開始主動接觸 Keivan,表達了微軟對於 AppGet 的興趣,並表示可以給 Keivan 提供在微軟的職位,共同開發 Windows 系統的軟件包管理項目。
期間,Andrew 多次與 Keivan 以交換意見為由進行面試溝通,獲取了 AppGet 的開發思路。去年 12 月,Keivan 在微軟位於西雅圖的總部接受了一整天的採訪,事情本來正向着好的方向發展。
然而此後的 6 個月裏,微軟沒有再與 Keivan 聯繫。直到今年 5 月,Keivan 突然收到了一封來自微軟的郵件:“我想花點時間告訴你,我們非常感謝你的投入和見解。我們一直在構建 windows 包管理器,第一個預覽版將於明天在 Build 上線,我們的包管理器也將是開源的,我們歡迎您的任何貢獻。”隨後,微軟就在 Build 上發佈了 WinGet 。
Keivan 表示,當他看到公告和 WinGet 的代碼時感到很震驚。Keivan 認為 WinGet 的核心機制、術語、manifest 格式和結構,甚至是包存儲庫的文件夾結構都有 AppGet 的影子。而微軟在公告中對於 AppGet 的描述僅有一句 “ ……還有許多其他類似 AppGet、Npackd 和基於 PowerShell 的 OneGet 包管理器。”
Keivan 對微軟的做法感到非常失望,他認為微軟抄襲他的開源軟件沒有問題,但希望自己的工作獲得適當的榮譽。為此他發表了“AppGet 之死”一文,宣佈放棄 AppGet 項目的更新,因為與微軟這種量級的開發者競爭沒有任何意義。
而對於微軟面試官 Andrew 的做法,Keivan 在推特中表示:“我並不想站在 WinGet 的對立面,我也不希望任何人因這件事被解僱,我只是想分享我在這個故事中遭遇的一些不公平對待。”同時他也不想因為一些私人恩怨而毀掉一款好的產品,希望微軟方面能給出適當的答覆。
5 月 30 日,微軟產品經理 Andrew 在微軟官方發文回應稱,“去年夏天,我們與 Keivan 進行了交談,探討了共同提供 Windows Package Manager 的潛在機會。AppGet 具有許多品質,確實可以幫助我們為 WinGet 找到更好的產品方向。” 承認了 Keivan 與 AppGet 對微軟 WinGet 項目的貢獻。
“Windows Package Manger 的宗旨,是提供產品讓社區和用户都能做出貢獻並獲得認可,這就是為什麼我們要把它建立在 GitHub 上的原因;在過去的幾天裏,我們聽取了社區的意見,並從中吸取了教訓,顯然我們有負於這個目標。更確切地説,我們辜負了 Keivan 和 AppGet 。這也是我們最不願意看到的。”
Andrew 還明確列出了數個 AppGet “幫助 WinGet 變得更好”的貢獻:
Andrew 表示希望藉此機會表達對 Keivan 提供的 AppGet 的開發思路,以及 Keivan 與微軟合作的感謝。並希望未來能和 Keivan 以及其他開發者合作,把 WinGet 做得更好。
儘管微軟承認了 AppGet 的貢獻並表達了謝意,但仍然沒有表達對整件事情的歉意,有網友對此表達了不滿。
甚至有網友表示“這下所有事情都明朗了,微軟之所以開始向開源靠攏,是為了更方便竊取別人的勞動成果?”
其實網友的嘲諷並非心血來潮,早在 2018 年 6 月,微軟就曝出過類似的抄襲事件。當時,開源的多包存儲庫管理工具 Lerna 作者 jamiebuilds 指責微軟抄襲其代碼。
jamiebuilds 表示,當自己在為 Babel 6 工作的過程中發現所有東西都拆分成漂亮的小插件包,但同時也就需要管理數十個軟件包。因此,多包存儲庫管理工具 Lerna.js 應運而生。
為讓項目更好用,他對項目進行了 5 次重寫,試圖讓架構更完善。之後某天,jamiebuilds 發現了微軟推出了由許多小包組成的新的設計體系,本以為是微軟在項目中使用了 Lerna ,結果發現他們使用的是一個名為 “Rush” 的東西。
Rush 或許是微軟在 Lerna 的基礎上開發的一個分支?抱着這樣的想法,jamiebuilds 進一步查看了 Rush 的 Git 日誌,結果發現該項目是在 Lerna 創建幾天之後創建的,同時在文檔中介紹了包括 Lerna 在內的其他類似工具,並稱之為“不夠好的產品”,儼然一副 “Rush 是比這些產品都要好的原創工具”的樣子。
為了解二者的區別,jamiebuilds 對兩個項目進行了對比,結果發現 Rush 的文件和目錄命名、核心功能的代碼都與 Lerna 完全相同,甚至連提交記錄都是一致的,也就是説 Rush 在不斷複製 Lerna 的更改,然後聲稱其是微軟開發的原創作品。
jamiebuilds 稱自己主動與認識的微軟員工聯繫説明此事後,對方感到震驚並道歉,但之後並沒有任何來自官方的合理解釋。Rush 項目也沒有去更改許可證,或者添加補充説明,而是將提交記錄進行了混淆,將代碼位置進行移動,並重新編寫或重命名了一些函數。
jamiebuilds 提到,如果是其他人做了這件事,他或許會有點不高興但仍然把他忽略掉。但微軟這樣一個萬億市值的軟件業巨頭做這樣的事情,這令他非常生氣。
這件事最後不了了之。值得一提的是,這一次 Lerna 的開發者並沒有選擇向微軟屈服。如今 Lerna 在 GitHub 上擁有 23k 的 Star ,成為名副其實的明星項目,以至於微軟後來在自己的項目 Just 中也把多包存儲管理工具改為使用 Lerna 。
儘管這些抄襲事件或許只是由微軟個別員工的不當做法引起,但微軟的一系列抄襲行為還是引發了開源界的擔憂。事實上,在開源社區中 fork 或 copy 某人的代碼並不是什麼壞事。但微軟這種將別人的勞動成果歸功於己的行為,顯然違反了開源社區應有的道德規範,當然也違反了開源協議。
目前,很多軟件工程師普遍對於開源協議仍然不夠了解。有人甚至認為:開源軟件就是免費的軟件,所以我可以不受限制地隨意使用。這顯然是一種誤解。
據業內律師介紹,開源軟件與專有軟件等閉源軟件一樣,都是受法律保護的。開源軟件的著作權既沒有放棄也沒有過期,作者仍然是享有著作權的。除了著作權外,開源軟件還可能被合同法、專利法、商標法等法律所規制。在著作權法的語境下,軟件代碼是類似於文字作品一樣被保護的。在獲得了一段源代碼之後,默認情況下不能對該源代碼進行改編或者再發行。而開源軟件的特點在於,對於部分寬鬆開源協議(如 MIT、Apache 2.0)來説,在使用者承諾滿足一定條件(通常包括給作者署名、附帶許可證)的情況下,作者會放棄、讓渡部分權利,例如允許使用者將代碼改編或者再發行。
律師介紹,使用者所承諾的條件以及作者所放棄的部分權利形成了一種合同關係,更具體來講是許可合同,在開源軟件的情況下該合同也就是我們常説的開源許可證(License)。許可證是一種無需磋商的、標準化的公共合同,降低了合同的成本。