華為雲 ServiceComb 抄襲 Go Micro 代碼
2017年6月19日在(LC3)開源峰會上,華為宣布開源了微服務框架 ServiceComb,華為稱它是 FusionCloud 解決方案中 PaaS 平台的重要組成部分,內置了高可靠性運行、動態治理等運維階段的高級能力。
並在2017年12月4日獲得全票通過,進入Apache孵化器。
但在13天前,Asim Aslam在GitHub上開的一個問題單(issue)引起了軒然大波,他覺得有人將他開發的go-micro代碼拿來改頭換面後,做成了一個新的微服務框架。
今日在微博上也引起了關註:
相關人員在Github上作了回復。現將他們在Github上的互動內容編譯如下:
這不是靈感來自go-micro的項目。它簡直照搬照抄了代碼。我實際編寫的代碼隨處可見。也許有人該出面談談如何可以利用go-micro,而不是只是獲取代碼。
Asim你好,我同意利用go-micro,而不是只是獲取代碼的觀點。但我們在談論靈感來源時,我指的是micro介面設計和插件思路,它們很贊,很感謝那些部分,我們已經改變了選擇器(selector)等組件的許多實現,或者說改變了介面。所以我們有2個文件夾,「vendor」用來放我們從未改變的那些庫,而「third_party」用來放我們作了一些改變的庫,我們會將所有go-micro代碼放在那裡,之後你可以再次檢查我們的代碼,看看我們是否正確處理了你的代碼。
致以誠摯的問候!
- https://github.com/ServiceComb/go-chassis/tree/master/core/client/client.go
- https://github.com/ServiceComb/go-chassis/tree/master/core/server/server.go
- https://github.com/ServiceComb/go-chassis/blob/master/core/transport/transport.go
- https://github.com/ServiceComb/go-chassis/tree/master/core/loadbalance/default.go
- https://github.com/ServiceComb/go-chassis/tree/master/core/loadbalance/selector.go
- https://github.com/ServiceComb/go-chassis/tree/master/core/loadbalance/filter.go
- https://github.com/ServiceComb/go-chassis/blob/master/core/loadbalance/strategy.go
- https://github.com/ServiceComb/go-chassis/blob/master/core/loadbalance/options.go
- https://github.com/ServiceComb/go-chassis/tree/master/core/client/client.go
- https://github.com/ServiceComb/go-chassis/tree/master/core/server/server.go
- https://github.com/ServiceComb/go-chassis/blob/master/core/transport/transport.go
- https://github.com/ServiceComb/go-chassis/tree/master/core/loadbalance/default.go
- https://github.com/ServiceComb/go-chassis/tree/master/core/loadbalance/selector.go
- https://github.com/ServiceComb/go-chassis/tree/master/core/loadbalance/filter.go
- https://github.com/ServiceComb/go-chassis/blob/master/core/loadbalance/strategy.go
- https://github.com/ServiceComb/go-chassis/blob/master/core/loadbalance/options.go
以上是來自micro的所有文件,我會將它們移到third_party文件夾。
Asim你好,我已更改了代碼,請再檢查一下,我這樣可以嗎?多謝!我為沒有將那些文件移到third_party文件夾表示真誠的歉意,是我的錯。
另外還有好多地方你只是照搬了代碼,沒有參考許可證。你的確認識到所有micro項目都採用apache2許可證,這意味著你必須註明代碼從哪裡獲取並致以謝意,哪怕在修改之後。
TCP transport
你的:https://github.com/ServiceComb/go-chassis/blob/master/transport/tcp/tcp.gomicro的:https://github.com/micro/go-plugins/blob/master/transport/tcp/tcp.go
還有,這是華為官方項目還是不相干的獨立項目?我覺得一家公司不該有這樣的行為。
這是我頭一回搞Go開源項目。我承認我犯了些錯誤。你可否給出一些建議,以便更妥當地利用go-micro?目前我們有一個不同的註冊中心模型(registry model),我們可能很難直接利用go-micro代碼,也許我們以後可以探討相關的一些細節。
謝謝指出這一點,go-micro是一種出色的框架,我受益匪淺。我確實很感謝你所做的工作。
你可以告知你的電子郵箱嗎?那樣我們可以通過郵件進一步探討,非常感謝!
我覺得不需要在除GitHub這個公共論壇之外的其他任何論壇探討這個話題,大家在這裡都看得見。
請問這是華為官方項目嗎?
go-micro的許可證和版權已包含在go chassis的初始提交版中,見此[1]
現在,go-micro的版本已添加到ROOT目錄中的通告文件中。
[1]https://github.com/ServiceComb/go-chassis/blob/master/third_party/forked/go-micro/LICENSE
謝謝你這麼做。不過你還是沒有回答我的問題:這是華為的官方項目嗎?
將許可證包含在third_party中並不能成為拷貝其他地方的代碼,轉而用作自己介面的理由。針對代碼作了修改的地方,你必須向創作者致以謝意。我看到這個做法後來已改正。
請回答我的問題:這是華為的官方項目嗎?
Asim你好,
感謝幫助我們糾正許可證問題,以尊重原始創作者的版權。go-chassis目前是放在Github上的一個一般性開源項目,但我們確實計劃將它合併到Apache ServiceComb(孵化中),後者是華為捐獻的項目。這對你來說是個問題嗎?我不是很清楚你說的華為官方項目是指什麼意思。你可以就此明確一下嗎?我覺得go-micro的可插入式設計確實很出色。go-chassi使用go-micro的客戶機、伺服器、選擇器、編解碼器和transport等模塊以獲得可插入性,但是go-chassis擁有另外一些高級的服務治理功能,比如容錯、斷路器、負載均衡、監控和熱重新配置。不管怎樣,如果我們可以利用go-micro,同時又回過頭來將一些變更貢獻給上游,那就太棒了,我非常樂於參與任何這種討論。
Asim隨後逐句作了針對性的答覆(內容已經過編輯):
我不是很清楚你說的華為官方項目是指什麼意思。
我是問,你在華為搞這個項目嗎?這項工作得到華為的資助嗎?這是在公司上班時間搞的嗎?這就是官方項目的真正含義。
go-chassis擁有另外一些高級的服務治理功能,比如容錯、斷路器、負載均衡、監控和熱重新配置。
這些是micro以不同方式來處理的問題。我們有一個名為wrappers的中間件介面,可以添加額外功能:https://github.com/micro/go-plugins/tree/master/wrapper。還在go-os方面付出了努力,但需要開發者團隊才能推進工作:https://github.com/micro/go-os。
不管怎樣,如果我們可以利用go-micro,同時又可以回過頭來將一些變更貢獻給上游,那就太棒了,我非常樂於參與任何這種討論。
貢獻代碼誰都歡迎。插件在go-plugins中加以維護:https://github.com/micro/go-plugins。如果正如你所說你在構建更高級的功能,看起來這功能像是生態系統的一部分:https://micro.mu/explore/。如果這是華為官方項目,我們很有興趣與華為合作,就像我們與Sixt合作那樣。
謝謝建議。作為開源開發者,幾個項目作為一個社區協同運作是常見的做法。但是建立起商業合作關係可能需要一點時間,也許我們以後可以在另一個帖子中談論此事。
一位旁觀者稱:
我覺得這是個官方項目。像華為和小米等許多中國大公司(不好意思我也來自中國)並不很重視「開源」。它們從開源項目竊取源代碼的做法很常見。無論怎樣,華為在這個項目上還算做得比較好,至少它讓你知道這一點。
推薦閱讀:
※蘋果的教訓,華為的啟示,魅族楊柘該做出什麼樣的選擇?
※三星Note 8又來了,中國用戶憑什麼買單?
※華為為何在美遭禁?
※華為數通HCIE備考及考試全過程記錄第三篇