- มีการส่งพูลรีเควสต์โค้ด Rust ที่นำ Direct Memory Access API ไปใช้งานเข้าไปยังรีโพซิทอรีเคอร์เนลลินุกซ์
- Christoph Hellwig ผู้ดูแลระดับกลางของเคอร์เนลลินุกซ์ปฏิเสธ โดยระบุว่าไม่ควรนำโค้ด Rust เข้ามาในเคอร์เนลลินุกซ์ และความขัดแย้งก็เริ่มต้นขึ้น
- เมื่อความขัดแย้งขยายใหญ่ขึ้นเรื่อย ๆ Christoph Hellwig ได้เปรียบเทียบ Rust ว่าเป็นเซลล์มะเร็ง
- Hector Martin หัวหน้าโครงการ Asahi Linux ไม่พอใจกับคำพูดเรื่องเซลล์มะเร็งนี้ จึงวิจารณ์อย่างรุนแรงบนโซเชียลมีเดียพร้อมดึง Linus Torvalds เข้ามาเกี่ยวข้อง
- Linus Torvalds เตือน Hector Martin ว่า "ปัญหาคือตัวคุณเอง" และ "อย่าระดมความเห็นจากสาธารณะบนโซเชียลมีเดีย (Brigading)"
- ขณะนี้ Hector Martin ได้ขอถอนตัวจากตำแหน่งผู้ดูแลโค้ดอัปสตรีมลินุกซ์ที่รองรับฮาร์ดแวร์ Apple Arm
28 ความคิดเห็น
สรุปฉบับย่อกล่าวถึงเพียงเหตุการณ์ที่เกิดขึ้น แต่ที่ช่วงท้ายของต้นฉบับ (เป็นภาษาเกาหลี) ยังมีข้อมูลพื้นฐานเพิ่มเติมอีก 2 อย่างที่จะช่วยให้เข้าใจเหตุการณ์นี้ได้ดียิ่งขึ้น
ผมคิดว่าการดูแลโปรเจ็กต์ด้วยภาษาเดียวเป็นเรื่องที่ดี แต่แยกจากประเด็นนั้นแล้ว วิธีที่ใช้โน้มน้าวเพื่อนร่วมงานให้ยอมรับเรื่องนี้แย่มากจริง ๆ
การบังคับให้คนยอมจำนนด้วยอำนาจเป็นเรื่องไม่ยุติธรรม
นี่คือเธรดอีเมลของ PR ดังกล่าว:
https://lwn.net/ml/all/…
ดูเหมือนว่าไม่ใช่การแก้ implementation ของ DMA และไม่ได้ไปแตะ DMA API โดยตรง แต่เป็น PR ที่เขียน FFI binding เพื่อให้ Rust เข้าถึง DMA API ได้
แต่ PR แบบนั้นกลับถูกปฏิเสธด้วยข้อความสั้น ๆ ว่า "No rust code in kernel/dma, please." และเมื่อถามว่าควรทำอย่างไร ก็ได้รับคำตอบว่า "Keep the wrappers in your code instead of making life painful for others." https://lwn.net/ml/all/20250108135951.GA18074@lst.de/
https://lwn.net/ml/all/20250108151858.GB24499@lst.de/
(ซึ่งก็ทำตามที่บอกแล้วจริง ๆ เพราะ PR นี้ไม่ได้แก้
kernel/dmaแต่แก้ subtree ใต้rust/kernel)แน่นอนว่าเมื่อมีการเพิ่ม FFI binding ก็ย่อมมีภาระที่ต้องแก้ Rust FFI binding ด้วยเวลาที่ DMA API เปลี่ยนแปลง
แต่ถึงฝั่งที่ทำ Rust จะบอกเองว่าจะรับผิดชอบจัดการส่วนนั้นให้ดีอยู่แล้ว ผมก็ยังไม่แน่ใจว่านี่เป็นท่าทีคัดค้านที่เหมาะสมหรือไม่ จากคนที่ไม่ได้เป็นผู้ดูแลต้นไม้ส่วนนั้น
(Christoph Hellwig เป็น maintainer ของ
kernel/dma: https://docs.kernel.org/process/maintainers.html#dma-mapping-helpers)เพราะอย่างนั้น Hector Martin น่าจะดึง Linus เข้ามาในเธรดนี้:
https://lwn.net/ml/all/2b9b75d1-eb8e-494a-b05f-59f75c92e6ae@marcan.st/
แต่ที่น่าสนใจคือในเธรก่อนหน้านั้นมีประเด็นที่คุยกันไว้ว่า
ถ้า Rust team ไม่รีบรับมือกับ breaking change ใน API ให้ทัน บิลด์ก็จะพัง และ Linus จะไม่รับ PR
พอมองว่าเป็นปัญหาระหว่างโมดูลที่สร้าง breaking change กับอีกโมดูลหนึ่ง ผมกลับรู้สึกว่าฝั่งที่มี Rust ดูดีกว่า
สมมติว่าโมดูล x เป็นคนสร้าง breaking change และโมดูล y รับมือไม่ทัน:
ส่วนที่ใช้
unsafeของ Rust ในลินุกซ์เคอร์เนล ส่วนใหญ่เป็นส่วนที่ทำการห่อหุ้มร่วมกับ Cนอกจากนี้ก็มีส่วนควบคุมฮาร์ดแวร์ที่ต้องจัดการหน่วยความจำโดยตรงอยู่บ้าง แต่มีน้อยมาก
ส่วนที่ Rust ถูกนำมาใช้คือการพัฒนาไดรเวอร์ ไม่จำเป็นต้องไปแตะการจัดการหน่วยความจำหรือ block layer รวมถึงตัวเคอร์เนลเองก็ทั้งไม่จำเป็นและทำไม่ได้
โค้ดไดรเวอร์มีจำนวนมากกว่าโค้ดของตัวเคอร์เนลเองอย่างมาก และจุดที่เกิดปัญหาส่วนใหญ่ก็มักอยู่ที่โค้ดไดรเวอร์
ผมคิดว่าส่วนของการพัฒนาไดรเวอร์ควรถูกพัฒนาด้วยภาษาที่มีความปลอดภัยด้านหน่วยความจำและความปลอดภัยโดยรวมดีกว่า C
จะเป็น Rust หรือ Zig หรือภาษาไหน ผมก็ไม่แน่ใจ
ผมเองก็เห็นด้วยว่า Rust ซับซ้อนเกินไปสำหรับการพัฒนาแอปทั่วไป และสำหรับนักพัฒนา C ที่จะเรียนให้เร็วก็ไม่ง่าย
ถึงอย่างนั้นไม่ว่าจะเป็นภาษาอะไร ผมก็หวังว่าอย่างน้อยงานพัฒนาไดรเวอร์จะเปลี่ยนไปใช้ภาษาสมัยใหม่
ที่บริษัทเก่าของผม เคยใช้เวลาประมาณ 7 ปีในการพัฒนาและทำให้ไดรเวอร์ที่มีโค้ดไม่กี่พันบรรทัดเสถียร แม้จะลดทอนให้เรียบง่ายทั้งหมดไม่ได้ แต่คร่าว ๆ แล้วน่าจะใช้เวลากับการดีบักเพียงอย่างเดียวราว 3 ปี
ส่วนใหญ่เป็นบั๊กที่เกี่ยวกับหน่วยความจำ และข้อผิดพลาดเชิงตรรกะแบบ deadlock มีเพียงส่วนน้อย
ดูแล้วไม่ค่อยดีเท่าไรที่จะใช้โปรเจกต์ใหญ่เป็นสนามทดลองให้กับภาษาของตัวเอง
ถ้าขัดใจกันก็จำเป็นต้องกลับไปสู่ยุคเก่าที่แยก fork กันออกมาได้แล้ว
สำหรับเคอร์เนลที่ดูแลทั้งระบบอุปกรณ์ ผมคิดไม่ออกเลยว่ายังมีเหตุผลอะไรให้ลองใช้ Rust เพราะพอเริ่มใช้
unsafeก็สุดท้ายจะกลายเป็นโค้ดที่อ่านยากและมีปัญหาอยู่ดีไม่ใช่ว่าเป็นโปรเจกต์แบบ 0.91 0.92 0.99 0.991 อะไรทำนองนี้ที่ยังไม่มีเมนรีลีสเสียหน่อย เลยไม่เข้าใจว่าทำไมถึงเอาส่วนที่เดิมก็ทำงานได้ดีอยู่แล้วมาพอร์ต
ไม่ใช่กรณีที่มีบั๊กใหญ่แล้วเลยถือโอกาสเปลี่ยนให้ปลอดภัยขึ้นด้วยเสียหน่อย
PR นี้ไม่ใช่การพอร์ต แต่เป็น PR ที่เพิ่ม FFI binding ฝั่ง Rust เพื่อให้โมดูลที่พัฒนาด้วย Rust ซึ่งเขียนขึ้นใหม่สามารถใช้ DMA API เดิมได้ และฝ่ายที่ดูแล DMA เป็นคนขัดขวางเรื่องนั้น
น่าเสียดายที่ในเนื้อหาบทความไม่มีต้นฉบับที่อ้างอิงมาให้ด้วย ผมเลยไปค้นหาต้นฉบับมาอ่านเพราะอยากรู้ และแม้ว่าผมเองก็อาจยังเข้าใจได้ไม่ครบถ้วน แต่ดูเหมือนว่าถ้าจะเล่าแบบง่าย ๆ ตามต้นฉบับอย่างเดียว เรื่องนี้ก็น่าจะมีเบื้องหลังอยู่อีกพอสมควรครับ
ชื่อบทความถูกเปลี่ยนกลับเป็นชื่อดั้งเดิมแล้ว
ขอบคุณที่ดำเนินการให้ครับ
การเอา Rust ไปผนวกเข้ากับโค้ดเบส C ขนาดใหญ่ดูเหมือนจะไม่ได้สนุกอย่างที่คิดนะครับ จะบอกว่าเพิ่มความปลอดภัยด้านหน่วยความจำก็พูดได้ไม่เต็มปาก เพราะอย่างไรก็ต้องมีส่วน
unsafeใหญ่ขึ้นอยู่ดี เลยไม่ได้มีประสิทธิผลมากนัก.... สุดท้ายก็ดูเหมือนจะไม่ได้มีความหมายไปมากกว่าการขยายขอบเขตการใช้งาน Rust.... ดังนั้นการก่อให้เกิดแรงต้านจากนักพัฒนา C เดิมจึงน่าจะเป็นลำดับที่เกิดขึ้นตามธรรมชาติ ผมคิดว่าไปโฟกัสกับโปรเจกต์เคอร์เนลที่เริ่มต้นด้วย Rust ตั้งแต่แรกจริง ๆ อาจจะดีกว่าครับไม่สิ คุณภาพของเนื้อหาดีกว่าที่คิดไว้พอสมควรเลยครับ อ่านได้สนุกมาก
ประเด็นที่ทอร์วัลดส์พูดว่า "ปัญหาคือคุณ" นั้น ไม่ได้เกี่ยวข้องกับการนำ Rust มาใช้ แต่เป็นข้อโต้แย้งว่า SNS ไม่อาจเป็นคำตอบของปัญหาทางเทคนิคได้ อย่างไรก็ตาม ถ้าดูเพียงสรุปนี้อย่างเดียว ก็ดูเหมือนจะทำให้เกิดความเข้าใจผิดได้ครับ
สำหรับเฮกเตอร์ มาร์ตินแล้ว มันเป็นทางเลือกที่เลี่ยงไม่ได้
ในเมื่อผู้ดูแลระดับกลางของลินุกซ์ล้วนเป็นผู้เชี่ยวชาญ C กันหมด ความเห็นของนักพัฒนา Rust ซึ่งมีอยู่เพียงส่วนน้อย จะมีทางถูกรับฟังได้อย่างไร
https://youtu.be/opTJH76wJxs?si=WHR0_1uPpSlpDTHr แสดงให้เห็นกระบวนการที่ลุกลามกลายเป็นข้อถกเถียง
ทอร์วัลดส์ก็ยอมให้ใช้ Rust อยู่แล้วไม่ใช่เหรอ?
ทอร์วัลดส์ไม่ได้พูดถึง Rust แม้แต่คำเดียวในข้อถกเถียงนั้น
เวลาเกิดข้อพิพาทด้านความเห็นเชิงเทคนิค ก็ควรถกกันด้วยเหตุผลทางเทคนิคสิ
อย่าพยายามยุติข้อพิพาทด้วยการสร้างกระแสความเห็นบน SNS
ถ้าพวกคุณเก่งกันขนาดนั้น ก็ฟอร์กเคอร์เนลแล้วเขียนทั้งหมดด้วย Rust ไปเลยสิ อย่าค่อย ๆ แทรกซึมเข้ามาเหมือนมะเร็ง มีความเห็นแบบนี้กันเยอะนะ
ถ้าเป็นโค้ดที่ไปแตะฝั่ง
kernel/dmaเพื่อทำให้ใช้งานจาก Rust ได้ง่ายขึ้นก็คงอีกเรื่องหนึ่ง แต่โค้ดนั้นเป็นโค้ดที่เพิ่มชั้น FFI ซึ่งห่อkernel/dmaไว้เข้าไปในrust/kernel/dmaครับไม่ได้ไปแก้โค้ดต้นฉบับเลย
ในความเป็นจริง ประเด็นสำคัญคือประมาณว่า
"ผมไม่ชอบเวลามีคนใช้ DMA FFI อย่างเป็นทางการที่ทำด้วย Rust ผิด แล้วมาถามผม" ...
แล้วก็ยังพูดต่อแบบไม่ค่อยสมเหตุสมผลว่า ให้แต่ละไดรเวอร์ไปสร้าง FFI กันเองเอา
นั่นคือ Redox น่ะครับ/ค่ะ คงกำลังไปทางลินุกซ์เพราะยังมีบางส่วนที่ยังไม่รองรับ...
https://vt.social/@lina/113064510447670892
เนื้อหาที่คุณเขียนมาดูเหมือนจะเป็นคำพูดของ Hellwig ตรงๆ ทั้งหมด แต่ผมก็ไม่แน่ใจว่าจะมองได้ว่าความเห็นแบบนั้นเป็นเสียงส่วนใหญ่หรือไม่
สวัสดีครับ ขอบคุณที่โพสต์บทความดี ๆ สนุกมากที่ได้อ่านครับ
แต่พอได้ลองตรวจดูต้นฉบับและดูชื่อเรื่องของต้นฉบับแล้ว มีจุดที่กังวลอยู่เล็กน้อย เลยขอแสดงความคิดเห็นไว้ครับ
https://news.hada.io/guidelines
> โดยพื้นฐานแล้ว กรุณาใช้ชื่อเรื่องต้นฉบับ หรือแปลชื่อเรื่องเป็นภาษาเกาหลีแล้วโพสต์
มีข้อเสนอไว้เช่นนี้ และเมื่อได้อ่านเนื้อหาของบทความดังกล่าวแล้ว ผมคิดว่าชื่อเรื่องว่า "ข้อถกเถียงเรื่อง Rust ใน Linux kernel ปะทุขึ้นอีกครั้ง" แทนที่จะเป็น "Linus Torvalds 'ปัญหาอยู่ที่คุณ'" นั้น ยังอาจทำให้เกิดความเข้าใจผิดเกี่ยวกับเนื้อหาของบทความได้มากกว่าชื่อเรื่องต้นฉบับเสียอีกครับ
ขอบคุณอีกครั้งที่ช่วยสรุปและแนะนำบทความให้ครับ ขอให้เป็นวันที่ดีครับ
เจ๋งสุดๆ
จะนำไปพิจารณา
'm 'b ขอให้เป็นวันที่ดี! ขอบคุณที่ทำให้ได้อ่านบทความดีๆ (__ )
เดิมผมติดนิสัยใส่คำบรรยายย่อยของตัวเองไว้ในชื่อเรื่องเพื่อให้อธิบายได้แม่นยำขึ้น แต่ไม่เพียงแค่ชื่อเรื่องนั้นไม่ตรงกับความต้องการของท่านอื่น ผมยังไม่ทราบด้วยว่ามีกฎแบบนี้อยู่ ต่อไปจะลงตามต้นฉบับตามเดิมครับ
ชื่อเรื่องเดิมทำให้เข้าใจได้ทันทีว่าเป็นเรื่องเกี่ยวกับอะไร ในขณะที่ชื่อเรื่องที่คุณแก้ไขอาจเสี่ยงต่อการทำให้เกิดความเข้าใจผิดว่าเป็นการพาดหัวล่อคลิกได้ ดูเหมือนจะเป็นเช่นนั้น นี่เป็นความเห็นส่วนตัวของผม
ขอบคุณสำหรับความคิดเห็นครับ
ผมคิดว่าคำพูดของ Linus สำคัญที่สุดจึงนำมาตั้งเป็นพาดหัว แต่ดูเหมือนว่ามันจะถูกบิดเบือนไปมากทีเดียว
ผมจะระมัดระวังให้มากขึ้นอย่างแน่นอนครับ