當前位置: 妍妍網 > 碼農

這是Linus最忍不了的一集——虛幻引擎程式碼規範禁止使用臟話、禁止slave、master

2024-05-25碼農

⬆️ 本周日下午,源創會深圳站,一起轟趴!

一位網友近日分享了 Epic Games 官方的 「虛幻引擎程式碼規範」,指出其中一些規定非常離譜,並質疑 Epic 「為什麽要把本來不是問題的事情變成問題」。

經查證,上面的截圖確實來自虛幻引擎官方文件。

但這並不是 Epic Games 對使用虛幻引擎 5 開發的要求, 而是 Epic 的自我約束 ——「在 Epic Games,我們有一些簡單的編碼守則和約定。本文件反映了 Epic Games 當前編碼標準的狀態。必須遵守編碼守則。」

BTW,Linus 幾年前透過了在 Linux 內核中避免 master/slave 等術語的提案。

當然不止 Linux,其他知名開源計畫和社群都有相關的政治正確舉動:


最後放一篇開源中國發表過
的舊文

6月17日,最初在 Git 中寫下「master」一詞的開發者 Petr Baudis 在社群網站上說, 「當我說話時,是給別人聽的,而不是給我自己聽的。」 意指當年不該使用「master」這個可能給別人造成傷害的詞語。

Petr Baudis 2005年參與編寫 Git 時,選擇了「master」(和「origin」),他曾多次希望可以改成「main」(和「 upstream」 )。直到現在,才由 GitHub 開始主導替換工作。

這幾天, GitHub 技術長 Billy Griffin 也在社群網站上忙著回帖。他的大多數回復都在表達一個意思:謝謝您的意見,我們非常同意,並且 我們已經開始著手將 master 替換成 main

他們發表上述言論的直接原因是,6月12日, 推特使用者 Una Kravets 喊話 GitHub,建議把 Git 中預設分支名字 「master」 改成 「main」。隨後,GitHub CEO 稱贊了這個提議,並在評論區@ Billy Griffin。

緊接著,更多人提出自己的意見,參與討論。Billy Griffin 開始一遍遍回應:我們在改了、我們在改了…… Petr Baudis 則說要去研究電腦術語「master/slave」的歷史。

GitHub 不是第一個在公眾的監督下,換掉 「master」的主體,也不會是最後一個。 美國的反歧視和反暴力執法運動,已經促使許多科技巨頭或知名軟體,調整自己的業務和產品,平息輿論。

IBM、亞馬遜、微軟接連調整面部辨識平台業務,以防加深歧視或遭受指責。GitHub、谷歌、 OpenShift,微軟的 PowerShell 手稿語言、P5.js JavaScript 庫 等近幾周先後開始更改源碼中,被認為帶歧視色彩的術語,以免不恰當的詞語造成傷害。

現在,關於是否要更改 「master/slave、blacklist/withelist」等詞語,可以改成什麽的討論還在繼續,而越來越多的軟體和廠商已經站好隊——決意替換這類詞匯。

多個公司更改程式碼中的電腦用語

電腦術語政治正確性其實不是新鮮話題。

2004年,「master/slave」曾被全球語言檢測機構評為年度最不政治正確的十大詞匯之一,時任主席稱這是政治滲透到電腦技術控制中的表現。早在那時,洛杉磯就有一個區域采購部門,以種族歧視為由,禁購采用該詞匯的軟體。

不過當時電腦軟體和網路並不像今天這麽普及,因此更改用語的事件比較零散。比如,2008年,開源軟體 Drupal 在社群釋出訊息,高調站隊,將「master/slave」重新命名為「client/server」,並解釋稱,在有更好的替代方案可用時,繼續使用潛在的、冒犯性術語通常是不受歡迎的。

之後一直到2018年, IETF 在草案當中,要求開源軟體更改「master/slave」和「blacklist/whitelist」兩項表述。電腦術語的使用才引起更廣泛關註。

同年,許多開發者呼籲一些開源軟體廠商修改源碼,Redis、谷歌、Python 都曾被要求這樣做。谷歌開始避免再使用「blacklist」一詞,Redis 和 Python 開始清除「master/slave」表述。

清除這些表述的成本不低。 谷歌幾天前確定 Chrome 瀏覽器中不再使用「blacklist/whitelist」的說法,後續計劃用用「blocklist/allowlist」來替代,但這項工作並不確定什麽時候能完成。

Redis 的作者 Antirez,早在2018年就解釋過修改源碼會產生的相容性問題,例如:

  • 不能再套用現有的 PR

  • 有像 INFO 和 ROLE 這樣的命令 —— 使用包含 slave 術語的協定進行回復

  • 術語 slave 中的原始碼包含 1500 個事件

  • 擁有私人計畫並根據需要進行程式碼合並的人會遇到很多問題

  • 尤其是最後一項,GitHub 現在也面臨這個問題。 Billy Griffin 在回復更換用語的建議時說,「我們正在與 Git 的其他利益相關者合作,以達成一致。」GitHub 從更新新儲存庫的預設設定開始,並為遷移提供更多指導,除了 GitHub Pages 之外,他們正更廣泛地更改新儲存庫的預設分支名稱。

    Billy Griffin 還在跟開發者解釋,為什麽更認可用「main」而不是其他詞來代替「master」。原因包括,前兩個字母相同,容易有肌肉記憶,另外表意也更為準確。此外,6月7日,Billy Griffin 還曾建議將電腦使用的 「blacklist/whitelist」 更改為「allowlist/denylist」。

    在 Una Kravets 呼籲 GitHub 換掉「master」一詞時,大家就在等待 Linus Torvalds 對這件事作出回應,解釋為何這樣寫。事實上,這個詞並不是 Linus 寫進去的,而且從 Linus 2018年的一些行動中,或許就能看出 Linus 對此類事情的態度。

    2018年9月16日,Linus 發行了 4.19-rc4 版本的內核, 他和其他幾個內核開發人員在內核樹的修補程式程式上簽字,合並了新的行為準則政策。

    行為準則涉及 要使用受歡迎、包容的語言 。人們對 Linus 的做法和行為準則本身有很多不滿, 有些人 認為采用行為準則是某些利益獲得群體,控制軟體計畫的一種方式,沒有必要在電腦用語中討論立場是否正確,技術應該是中立的。雖然 Linus 發完公告就結束了開發團隊,很多人也不喜歡新的行為準則,但這份準則還是留了下來,而「master」顯然不屬於準則中說的,是受歡迎的語言。

    為什麽碩士學位 master 不用改?黑色有什麽不對嗎?

    反對的聲音一直很多。

    最突出的兩個理由是:電腦源碼中的「master、blacklist」等詞語,並不包含歧視情緒;更改的成本不低。

    「即使我的想法是部落格中表達的那樣(程式碼中的 slave 並沒有指代奴隸的意思),但我最終還是決定改變 Redis (中引起爭議的)術語……但是我們需要做更多事情。」這是 Antirez 6月13日在社交平台上發表的言論,他道出了很多人的心聲。

    有開發者會問,如果要改程式碼中的詞,那麽英語國家的碩士(master)是不是要換?黑帽子、黑天鵝中的黑字是不是也要換掉?

    其實倡議者們想表達的,並不是不能使用「黑」這個詞,而是希望不要把「黑」作為「白」的對立面,表達「不好」、「壞」、「需要被限制」等負面意思。同理,當「master、slave」出現在源碼中,並且表達的「主-從」關系,這會讓一些人聯想到奴隸制。

    Drupal 十多年前重新命名「master/slave」時,就指出過這一點:如果程式碼裏有一句「here are the steps I had to take to get my slave running」,可以理解成:我執行一些步驟,讓分支執行;也可以理解成讓我的奴隸跑起來。而奴隸制並沒有消失,有些地方有人口販賣交易,很多移民或特殊工種本質上正在被奴役,所以在軟體社群,應該盡可能反對所有形式、語言的壓迫。

    針對「blacklist/whitelist」。 黑名單 blacklist:代表該被禁止的、不好的名單。白名單 whitelist:代表可以被允許的,好的名單。更容易給看到程式碼的人,造成「黑 = 不好,白 = 好」的印象,而且,「black」也常常和「slave」聯系在一起,提醒人們此前長時間存在的種族不平等。

    一直以來,黑人運動中,一個重要的「任務」就是告訴所有人:黑色 ≠ 不好、黑人 ≠ 奴隸 。上世紀,被譽為「黑人民族的桂冠詩人」 Langston Hughes 曾用 一首詩,來證明這個道理:

    我是黑色的

    當我照鏡子時,我看到我自己,但我並不感到羞恥

    上帝並沒有讓我比其他人更壞

    大地是黑色的,各種好東西從大地裏出來

    樹木、鮮花、水果、紅薯和玉米,以及一切使人活下去的東西,都是從地下冒出來的——古老的黑土地

    煤是黑色的,它可以溫暖你的房子、做飯

    夜晚是黑色的,有一個月亮,和一百萬顆星星,非常美麗

    睡眠是黑色的,它讓你得到休息,所以你醒來時感覺很好

    我是黑色的

    今晚我感覺很好

    「黑色有什麽不對嗎?」

    延伸閱讀

    Reference

    https://dev.epicgames.com/documentation/en-us/unreal-engine/epic-cplusplus-coding-standard-for-unreal-engine

    END

    熱門文章

    -

    -

    -

    -

    -