.. SPDX-License-Identifier: GPL-2.0 .. _tw_stable_api_nonsense: .. include:: ../disclaimer-zh_TW.rst :Original: :ref:`Documentation/process/stable-api-nonsense.rst <stable_api_nonsense>` è¯è€…:: ä¸æ–‡ç‰ˆç¶è·è€…: é¾å®‡ TripleX Chung <xxx.phy@gmail.com> ä¸æ–‡ç‰ˆç¿»è¯è€…: é¾å®‡ TripleX Chung <xxx.phy@gmail.com> ä¸æ–‡ç‰ˆæ ¡è¯è€…: æŽé™½ Li Yang <leoyang.li@nxp.com> 胡皓文 Hu Haowen <2023002089@link.tyut.edu.cn> Linux å…§æ ¸é©…å‹•æŽ¥å£ ================== 寫作本文檔的目的,是爲了解釋爲什麼Linuxæ—¢æ²’æœ‰äºŒé€²åˆ¶å…§æ ¸æŽ¥å£ï¼Œä¹Ÿæ²’有穩定 çš„å…§æ ¸æŽ¥å£ã€‚這è£æ‰€èªªçš„å…§æ ¸æŽ¥å£ï¼Œæ˜¯æŒ‡å…§æ ¸è£çš„接å£ï¼Œè€Œä¸æ˜¯å…§æ ¸å’Œç”¨æˆ¶ç©ºé–“ 的接å£ã€‚å…§æ ¸åˆ°ç”¨æˆ¶ç©ºé–“çš„æŽ¥å£ï¼Œæ˜¯æ供給應用程åºä½¿ç”¨çš„系統調用,系統調用 在æ·å²ä¸Šå¹¾ä¹Žæ²’有éŽè®ŠåŒ–,將來也ä¸æœƒæœ‰è®ŠåŒ–。我有一些è€æ‡‰ç”¨ç¨‹åºæ˜¯åœ¨0.9版本 æˆ–è€…æ›´æ—©ç‰ˆæœ¬çš„å…§æ ¸ä¸Šç·¨è¯çš„,在使用2.6ç‰ˆæœ¬å…§æ ¸çš„Linux發佈上ä¾ç„¶ç”¨å¾—很好 。用戶和應用程åºä½œè€…å¯ä»¥å°‡é€™å€‹æŽ¥å£çœ‹æˆæ˜¯ç©©å®šçš„。 åŸ·è¡Œç¶±è¦ -------- ä½ ä¹Ÿè¨±ä»¥çˆ²è‡ªå·±æƒ³è¦ç©©å®šçš„å…§æ ¸æŽ¥å£ï¼Œä½†æ˜¯ä½ ä¸æ¸…æ¥šä½ è¦çš„實際上ä¸æ˜¯å®ƒã€‚ä½ éœ€ è¦çš„其實是穩定的驅動程åºï¼Œè€Œä½ åªæœ‰å°‡é©…動程åºæ”¾åˆ°å…¬ç‰ˆå…§æ ¸çš„æºä»£ç¢¼æ¨¹è£ï¼Œ 纔有å¯èƒ½é”到這個目的。而且這樣åšé‚„有很多其它好處,æ£æ˜¯å› 爲這些好處使得 Linux能æˆçˆ²å¼·å£¯ï¼Œç©©å®šï¼Œæˆç†Ÿçš„æ“ä½œç³»çµ±ï¼Œé€™ä¹Ÿæ˜¯ä½ æœ€é–‹å§‹é¸æ“‡Linuxçš„åŽŸå› ã€‚ 入門 ----- åªæœ‰é‚£äº›å¯«é©…動程åºçš„“怪人â€çº”æœƒæ“”å¿ƒå…§æ ¸æŽ¥å£çš„改變,å°å»£å¤§ç”¨æˆ¶ä¾†èªªï¼Œæ—¢ 看ä¸åˆ°å…§æ ¸æŽ¥å£ï¼Œä¹Ÿä¸éœ€è¦åŽ»é—œå¿ƒå®ƒã€‚ 首先,我ä¸æ‰“算討論關於任何éžGPL許å¯çš„å…§æ ¸é©…å‹•çš„æ³•å¾‹å•é¡Œï¼Œé€™äº›éžGPLè¨±å¯ çš„é©…å‹•ç¨‹åºåŒ…括ä¸å…¬é–‹æºä»£ç¢¼ï¼Œéš±è—æºä»£ç¢¼ï¼ŒäºŒé€²åˆ¶æˆ–者是用æºä»£ç¢¼åŒ…è£ï¼Œæˆ–者 是其它任何形å¼çš„ä¸èƒ½ä»¥GPL許å¯å…¬é–‹æºä»£ç¢¼çš„驅動程åºã€‚如果有法律å•é¡Œï¼Œè«‹è«® 詢律師,我åªæ˜¯ä¸€å€‹ç¨‹åºå“¡ï¼Œæ‰€ä»¥æˆ‘åªæ‰“算探討技術å•é¡Œï¼ˆä¸æ˜¯å°çœ‹æ³•å¾‹å•é¡Œï¼Œ 法律å•é¡Œå¾ˆå¯¦éš›ï¼Œä¸¦ä¸”需è¦ä¸€ç›´é—œæ³¨ï¼‰ã€‚ 既然åªè«‡æŠ€è¡“å•é¡Œï¼Œæˆ‘們就有了下é¢å…©å€‹ä¸»é¡Œï¼šäºŒé€²åˆ¶å…§æ ¸æŽ¥å£å’Œç©©å®šçš„å…§æ ¸æº ä»£ç¢¼æŽ¥å£ã€‚這兩個å•é¡Œæ˜¯äº’相關è¯çš„,讓我們先解決掉二進制接å£çš„å•é¡Œã€‚ äºŒé€²åˆ¶å…§æ ¸æŽ¥å£ -------------- å‡å¦‚æˆ‘å€‘æœ‰ä¸€å€‹ç©©å®šçš„å…§æ ¸æºä»£ç¢¼æŽ¥å£ï¼Œé‚£éº¼è‡ªç„¶è€Œç„¶çš„,我們就æ“有了穩定的 二進制接å£ï¼Œæ˜¯é€™æ¨£çš„嗎?錯。讓我們看看關於Linuxå…§æ ¸çš„å¹¾é»žäº‹å¯¦ï¼š - å–決於所用的Cç·¨è¯å™¨çš„版本,ä¸åŒçš„å…§æ ¸æ•¸æ“šçµæ§‹è£çš„çµæ§‹é«”çš„å°é½Šæ–¹ å¼æœƒæœ‰å·®åˆ¥ï¼Œä»£ç¢¼ä¸ä¸åŒå‡½æ•¸çš„表ç¾å½¢å¼ä¹Ÿä¸ä¸€æ¨£ï¼ˆå‡½æ•¸æ˜¯ä¸æ˜¯è¢«inline ç·¨è¯å–決於編è¯å™¨è¡Œçˆ²ï¼‰ã€‚ä¸åŒçš„函數的表ç¾å½¢å¼ä¸¦ä¸é‡è¦ï¼Œä½†æ˜¯æ•¸æ“š çµæ§‹å…§éƒ¨çš„å°é½Šæ–¹å¼å¾ˆé—œéµã€‚ - å–æ±ºæ–¼å…§æ ¸çš„é…ç½®é¸é …,ä¸åŒçš„é¸é …æœƒè®“å…§æ ¸çš„å¾ˆå¤šæ±è¥¿ç™¼ç”Ÿæ”¹è®Šï¼š - åŒä¸€å€‹çµæ§‹é«”å¯èƒ½åŒ…å«ä¸åŒçš„æˆå“¡è®Šé‡ - 有的函數å¯èƒ½æ ¹æœ¬ä¸æœƒè¢«å¯¦ç¾ï¼ˆæ¯”如編è¯çš„時候沒有é¸æ“‡SMPæ”¯æŒ ä¸€äº›éŽ–å‡½æ•¸å°±æœƒè¢«å®šç¾©æˆç©ºå‡½æ•¸ï¼‰ã€‚ - å…§æ ¸ä½¿ç”¨çš„å…§å˜æœƒä»¥ä¸åŒçš„æ–¹å¼å°é½Šï¼Œé€™å–決於ä¸åŒçš„å…§æ ¸é…ç½®é¸ é …ã€‚ - Linuxå¯ä»¥åœ¨å¾ˆå¤šçš„ä¸åŒé«”ç³»çµæ§‹çš„處ç†å™¨ä¸Šé‹è¡Œã€‚在æŸå€‹é«”ç³»çµæ§‹ä¸Šç·¨ è¯å¥½çš„二進制驅動程åºï¼Œä¸å¯èƒ½åœ¨å¦å¤–一個體繫çµæ§‹ä¸Šæ£ç¢ºçš„é‹è¡Œã€‚ å°æ–¼ä¸€å€‹ç‰¹å®šçš„å…§æ ¸ï¼Œæ»¿è¶³é€™äº›æ¢ä»¶ä¸¦ä¸é›£ï¼Œä½¿ç”¨åŒä¸€å€‹Cç·¨è¯å™¨å’ŒåŒæ¨£çš„å…§æ ¸é… ç½®é¸é …來編è¯é©…動程åºæ¨¡å¡Šå°±å¯ä»¥äº†ã€‚這å°æ–¼çµ¦ä¸€å€‹ç‰¹å®šLinux發佈的特定版本æ 供驅動程åºï¼Œæ˜¯å®Œå…¨å¯ä»¥æ»¿è¶³éœ€æ±‚çš„ã€‚ä½†æ˜¯å¦‚æžœä½ è¦çµ¦ä¸åŒç™¼ä½ˆçš„ä¸åŒç‰ˆæœ¬éƒ½ç™¼ 佈一個驅動程åºï¼Œå°±éœ€è¦åœ¨æ¯å€‹ç™¼ä½ˆä¸Šç”¨ä¸åŒçš„å…§æ ¸è¨ç½®åƒæ•¸éƒ½ç·¨è¯ä¸€æ¬¡å…§æ ¸ï¼Œ 這簡直跟噩夢一樣。而且還è¦æ³¨æ„到,æ¯å€‹Linux發佈還æä¾›ä¸åŒçš„Linuxå…§æ ¸ï¼Œ é€™äº›å…§æ ¸éƒ½é‡å°ä¸åŒçš„硬件類型進行了優化(有很多種ä¸åŒçš„處ç†å™¨ï¼Œé‚„有ä¸åŒ çš„å…§æ ¸è¨ç½®é¸é …)。所以æ¯ç™¼ä½ˆä¸€æ¬¡é©…動程åºï¼Œéƒ½éœ€è¦æ供很多ä¸åŒç‰ˆæœ¬çš„å…§æ ¸ 模塊。 ç›¸ä¿¡æˆ‘ï¼Œå¦‚æžœä½ çœŸçš„è¦æŽ¡å–這種發佈方å¼ï¼Œä¸€å®šæœƒæ…¢æ…¢ç˜‹æŽ‰ï¼Œæˆ‘很久以å‰å°±æœ‰éŽ 深刻的教訓... ç©©å®šçš„å…§æ ¸æºä»£ç¢¼æŽ¥å£ -------------------- 如果有人ä¸å°‡ä»–çš„å…§æ ¸é©…å‹•ç¨‹åºï¼Œæ”¾å…¥å…¬ç‰ˆå…§æ ¸çš„æºä»£ç¢¼æ¨¹ï¼Œè€Œåˆæƒ³è®“é©…å‹•ç¨‹åº ä¸€ç›´ä¿æŒåœ¨æœ€æ–°çš„å…§æ ¸ä¸å¯ç”¨ï¼Œé‚£éº¼é€™å€‹è©±é¡Œå°‡æœƒè®Šå¾—沒完沒了。 å…§æ ¸é–‹ç™¼æ˜¯æŒçºŒè€Œä¸”快節å¥çš„,從來都ä¸æœƒæ…¢ä¸‹ä¾†ã€‚å…§æ ¸é–‹ç™¼äººå“¡åœ¨ç•¶å‰æŽ¥å£ä¸ 找到bug,或者找到更好的實ç¾æ–¹å¼ã€‚一旦發ç¾é€™äº›ï¼Œä»–們就很快會去修改當å‰çš„ 接å£ã€‚修改接å£æ„味ç€ï¼Œå‡½æ•¸åå¯èƒ½æœƒæ”¹è®Šï¼Œçµæ§‹é«”å¯èƒ½è¢«æ“´å……或者刪減,函數 çš„åƒæ•¸ä¹Ÿå¯èƒ½ç™¼ç”Ÿæ”¹è®Šã€‚一旦接å£è¢«ä¿®æ”¹ï¼Œå…§æ ¸ä¸ä½¿ç”¨é€™äº›æŽ¥å£çš„地方需è¦åŒæ™‚ ä¿®æ£ï¼Œé€™æ¨£æ‰èƒ½ä¿è‰æ‰€æœ‰çš„æ±è¥¿ç¹¼çºŒå·¥ä½œã€‚ 舉一個例åï¼Œå…§æ ¸çš„USB驅動程åºæŽ¥å£åœ¨USBå系統的整個生命週期ä¸ï¼Œè‡³å°‘ç¶“æ· äº†ä¸‰æ¬¡é‡å¯«ã€‚這些é‡å¯«è§£æ±ºä»¥ä¸‹å•é¡Œï¼š - 把數據æµå¾žåŒæ¥æ¨¡å¼æ”¹æˆéžåŒæ¥æ¨¡å¼ï¼Œé€™å€‹æ”¹å‹•æ¸›å°‘了一些驅動程åºçš„ 複雜度,æ高了所有USB驅動程åºçš„åžå率,這樣幾乎所有的USBè¨å‚™éƒ½ 能以最大速率工作了。 - 修改了USBæ ¸å¿ƒä»£ç¢¼ä¸çˆ²USB驅動分é…數據包內å˜çš„æ–¹å¼ï¼Œæ‰€æœ‰çš„驅動都 需è¦æ供更多的åƒæ•¸çµ¦USBæ ¸å¿ƒï¼Œä»¥ä¿®æ£äº†å¾ˆå¤šå·²ç¶“被記錄在案的æ»éŽ–。 這和一些å°é–‰æºä»£ç¢¼çš„æ“作系統形æˆé®®æ˜Žçš„å°æ¯”,在那些æ“作系統上,ä¸å¾—ä¸é¡ 外的ç¶è·èˆŠçš„USB接å£ã€‚這導致了一個å¯èƒ½æ€§ï¼Œæ–°çš„開發者ä¾ç„¶æœƒä¸å°å¿ƒä½¿ç”¨èˆŠçš„ 接å£ï¼Œä»¥ä¸æ°ç•¶çš„æ–¹å¼ç·¨å¯«ä»£ç¢¼ï¼Œé€²è€Œå½±éŸ¿åˆ°æ“作系統的穩定性。 在上é¢çš„例åä¸ï¼Œæ‰€æœ‰çš„開發者都åŒæ„這些é‡è¦çš„改動,在這樣的情æ³ä¸‹ä¿®æ”¹ä»£ 價很低。如果Linuxä¿æŒä¸€å€‹ç©©å®šçš„å…§æ ¸æºä»£ç¢¼æŽ¥å£ï¼Œé‚£éº¼å°±å¾—å‰µå»ºä¸€å€‹æ–°çš„æŽ¥å£ ï¼›èˆŠçš„ï¼Œæœ‰å•é¡Œçš„接å£å¿…é ˆä¸€ç›´ç¶è·ï¼Œçµ¦Linux USB開發者帶來é¡å¤–的工作。既然 所有的Linux USB驅動的作者都是利用自己的時間工作,那麼è¦æ±‚他們去åšæ¯«ç„¡æ„ 義的å…è²»é¡å¤–工作,是ä¸å¯èƒ½çš„。 安全å•é¡Œå°Linux來說å分é‡è¦ã€‚一個安全å•é¡Œè¢«ç™¼ç¾ï¼Œå°±æœƒåœ¨çŸæ™‚間內得到修 æ£ã€‚在很多情æ³ä¸‹ï¼Œé€™å°‡å°Žè‡´Linuxå…§æ ¸ä¸çš„一些接å£è¢«é‡å¯«ï¼Œä»¥å¾žæ ¹æœ¬ä¸Šé¿å…安 å…¨å•é¡Œã€‚一旦接å£è¢«é‡å¯«ï¼Œæ‰€æœ‰ä½¿ç”¨é€™äº›æŽ¥å£çš„驅動程åºï¼Œå¿…é ˆåŒæ™‚得到修æ£ï¼Œ 以確定安全å•é¡Œå·²ç¶“得到修復並且ä¸å¯èƒ½åœ¨æœªä¾†é‚„有åŒæ¨£çš„安全å•é¡Œã€‚å¦‚æžœå…§æ ¸ 內部接å£ä¸å…許改變,那麼就ä¸å¯èƒ½ä¿®å¾©é€™æ¨£çš„安全å•é¡Œï¼Œä¹Ÿä¸å¯èƒ½ç¢ºèªé€™æ¨£çš„ 安全å•é¡Œä»¥å¾Œä¸æœƒç™¼ç”Ÿã€‚ 開發者一直在清ç†å…§æ ¸æŽ¥å£ã€‚如果一個接å£æ²’有人在使用了,它就會被刪除。這 樣å¯ä»¥ç¢ºä¿å…§æ ¸å„˜å¯èƒ½çš„å°ï¼Œè€Œä¸”所有潛在的接å£éƒ½æœƒå¾—到儘å¯èƒ½å®Œæ•´çš„測試 (沒有人使用的接å£æ˜¯ä¸å¯èƒ½å¾—到良好的測試的)。 è¦åšä»€éº¼ -------- å¦‚æžœä½ å¯«äº†ä¸€å€‹Linuxå…§æ ¸é©…å‹•ï¼Œä½†æ˜¯å®ƒé‚„ä¸åœ¨Linuxæºä»£ç¢¼æ¨¹è£ï¼Œä½œçˆ²ä¸€å€‹é–‹ç™¼ è€…ï¼Œä½ æ‡‰è©²æ€Žéº¼åšï¼Ÿçˆ²æ¯å€‹ç™¼ä½ˆçš„æ¯å€‹ç‰ˆæœ¬æ供一個二進制驅動,那簡直是一個 噩夢,è¦è·Ÿä¸Šæ°¸é 處於變化之ä¸çš„å…§æ ¸æŽ¥å£ï¼Œä¹Ÿæ˜¯ä¸€ä»¶è¾›è‹¦æ´»ã€‚ å¾ˆç°¡å–®ï¼Œè®“ä½ çš„é©…å‹•é€²å…¥å…§æ ¸æºä»£ç¢¼æ¨¹ï¼ˆè¦è¨˜å¾—我們在談論的是以GPL許å¯ç™¼è¡Œ çš„é©…å‹•ï¼Œå¦‚æžœä½ çš„ä»£ç¢¼ä¸ç¬¦åˆGPL,那麼ç¥ä½ 好é‹ï¼Œä½ åªèƒ½è‡ªå·±è§£æ±ºé€™å€‹å•é¡Œäº†ï¼Œ ä½ é€™å€‹å¸è¡€é¬¼<把Andrewå’ŒLinuså°å¸è¡€é¬¼çš„定義éˆæŽ¥åˆ°é€™è£>ï¼‰ã€‚ç•¶ä½ çš„ä»£ç¢¼åŠ å…¥ å…¬ç‰ˆå…§æ ¸æºä»£ç¢¼æ¨¹ä¹‹å¾Œï¼Œå¦‚æžœä¸€å€‹å…§æ ¸æŽ¥å£æ”¹è®Šï¼Œä½ 的驅動會直接被修改接å£çš„ 那個人修改。ä¿è‰ä½ çš„é©…å‹•æ°¸é 都å¯ä»¥ç·¨è¯é€šéŽï¼Œä¸¦ä¸”ä¸€ç›´å·¥ä½œï¼Œä½ å¹¾ä¹Žä¸éœ€è¦ åšä»€éº¼äº‹æƒ…。 æŠŠé©…å‹•æ”¾åˆ°å…§æ ¸æºä»£ç¢¼æ¨¹è£æœƒæœ‰å¾ˆå¤šçš„好處: - 驅動的質é‡æœƒæå‡ï¼Œè€Œç¶è·æˆæœ¬ï¼ˆå°åŽŸå§‹ä½œè€…來說)會下é™ã€‚ - å…¶ä»–äººæœƒçµ¦é©…å‹•æ·»åŠ æ–°ç‰¹æ€§ã€‚ - 其他人會找到驅動ä¸çš„bug並修復。 - 其他人會在驅動ä¸æ‰¾åˆ°æ€§èƒ½å„ªåŒ–的機會。 - 當外部的接å£çš„改變需è¦ä¿®æ”¹é©…動程åºçš„æ™‚å€™ï¼Œå…¶ä»–äººæœƒä¿®æ”¹é©…å‹•ç¨‹åº - ä¸éœ€è¦è¯ç¹«ä»»ä½•ç™¼è¡Œå•†ï¼Œé€™å€‹é©…動會自動的隨ç€æ‰€æœ‰çš„Linux發佈一起發 布。 和別的æ“作系統相比,Linux爲更多ä¸åŒçš„è¨å‚™æä¾›ç¾æˆçš„é©…å‹•ï¼Œè€Œä¸”èƒ½åœ¨æ›´å¤šä¸ åŒé«”繫çµæ§‹çš„處ç†å™¨ä¸Šæ”¯æŒé€™äº›è¨å‚™ã€‚這個經éŽè€ƒé©—的開發模å¼ï¼Œå¿…然是錯ä¸äº† çš„ :) æ„Ÿè¬ ---- æ„Ÿè¬ Randy Dunlap, Andrew Morton, David Brownell, Hanna Linder, Robert Love, and Nishanth Aravamudan å°æ–¼æœ¬æ–‡æª”早期版本的評審和建è°ã€‚ 英文版ç¶è·è€…: Greg Kroah-Hartman <greg@kroah.com>