Linux

ในงาน Maintainers Summit ที่ประชุมกลุ่มนักพัฒนาเคอร์เนลลินุกซ์ปีนี้ ที่ประชุมตกลงปรับสถานะภาษา Rust จากเดิมที่เป็นโค้ดทดลอง (experimental) มาเป็นโค้ดปกติ

แม้ว่า Rust จะอยู่ในฐานะการทดลองในเคอร์เนลมาตลอด แต่ก็มีโค้ดจำนวนมากในเคอร์เนลเขียนด้วย Rust อยู่แล้ว เช่น Asahi Linux พยายามพัฒนาไดร์เวอร์ GPU ของ Apple Silicon ใน Rust และเป็นชนวนความขัดแย้งระหว่างนักพัฒนาจนผู้ดูแลโครงการลาออกไป โดยก่อนหน้านี้ Alex Gaynor นักพัฒนาเคอร์เนลคนแรกที่ทดลองใช้ Rust ในเคอร์เนลก็ถอนตัวออกมาแล้ว

ตอนนี้ API ต่างๆ ในเคอร์เนลยังไม่มีตัวแปลงเป็นภาษา Rust ทั้งหมด การเขียนไดร์เวอร์ต่างๆ ในภาษา Rust ยังทำได้จำกัด

แนวทางของโลก system programming ส่วนมากยอมรับว่า Rust ช่วยลดความเสี่ยงช่องโหว่ต่างๆ ลงได้ เมื่อเดือนที่แล้ว Debian ก็ผูก Rust เป็นส่วนหนึ่งของการ build ระบบไปเรียบร้อยแล้ว แต่ก็ยังมีเสียงต่อต้าน โดยเฉพาะข้อจำกัดที่ Rust ไม่ได้รองรับซีพียูทุกรุ่นเหมือนภาษา C

ที่มา - LWN.net

Hiring! บริษัทที่น่าสนใจ

Carmen Software company cover
Carmen Software
Hotel Financial Solutions
Next Innovation (Thailand) Co., Ltd. company cover
Next Innovation (Thailand) Co., Ltd.
We are web design with consulting & engineering services driven the future stronger and flexibility.
KKP Dime company cover
KKP Dime
KKP Dime บริษัทในเครือเกียรตินาคินภัทร
Kiatnakin Phatra Financial Group company cover
Kiatnakin Phatra Financial Group
Financial Service
Fastwork Technologies company cover
Fastwork Technologies
Fastwork.co เว็บไซต์ที่รวบรวม ฟรีแลนซ์ มืออาชีพจากหลากหลายสายงานไว้ในที่เดียวกัน
Thoughtworks Thailand company cover
Thoughtworks Thailand
Thoughtworks เป็นบริษัทที่ปรึกษาด้านเทคโนโยลีระดับโลกที่คว้า Great Place to Work 3 ปีซ้อน
Iron Software company cover
Iron Software
Iron Software is an American company providing a suite of .NET libraries by engineer for engineers.
CLEVERSE company cover
CLEVERSE
Cleverse is a Venture Builder. Our team builds several tech companies.
Nipa Cloud company cover
Nipa Cloud
#1 OpenStack cloud provider in Thailand with our own data center and software platform.
Bangmod Enterprise company cover
Bangmod Enterprise
The leader in Cloud Server and Hosting in Thailand.
CIMB THAI Bank company cover
CIMB THAI Bank
MOVING FORWARD WITH YOU - CIMB is the leading ASEAN Bank
Bangkok Bank company cover
Bangkok Bank
Bangkok Bank is one of Southeast Asia's largest regional banks, a market leader in business banking
MuvMi (Urban Mobility Tech Co.,Ltd.) company cover
MuvMi (Urban Mobility Tech Co.,Ltd.)
Shape the future of urban mobility towards affordable, clean, and safe solutions
T.N. Digital Solution Co., Ltd. company cover
T.N. Digital Solution Co., Ltd.
TNDS has been involving in every first move of banking’s major digital transformation.
KBTG - KASIKORN Business-Technology Group company cover
KBTG - KASIKORN Business-Technology Group
KBTG - "The Technology Company for Digital Business Innovation"
Siam Commercial Bank Public Company Limited company cover
Siam Commercial Bank Public Company Limited
"Let's start a brighter career future together"
Icon Framework co.,Ltd. company cover
Icon Framework co.,Ltd.
Global Standard Platform for Real Estate แพลตฟอร์มสำหรับธุรกิจอสังหาริมทรัพย์ครบวงจร มาตรฐานระดับโลก
REFINITIV company cover
REFINITIV
The Financial and Risk business of Thomson Reuters is now Refinitiv
H LAB company cover
H LAB
Re-engineering healthcare systems through intelligent platforms and system design.
The Gang Technology Co., Ltd. company cover
The Gang Technology Co., Ltd.
We're a Digital Agency that helps our customers transform their business into digital with ease.
LTMH company cover
LTMH
LTMH มุ่งเน้นการพัฒนาผลิตภัณฑ์ที่สามารถช่วยพันธมิตรของเราให้บรรลุเป้าหมาย
Seven Peaks company cover
Seven Peaks
We Drive Digital Transformation
Wisesight (Thailand) Co., Ltd. company cover
Wisesight (Thailand) Co., Ltd.
The Best Choice For Handling Social Media · High Expertise in Social Data · Most Advanced and Secure
MOLOG Tech company cover
MOLOG Tech
We are Modern Logistic Platform, Specialize in WMS, OMS and TMS.
Data Wow Co.,Ltd company cover
Data Wow Co.,Ltd
We enable our clients to realize increased productivity by solving their most complex issues by Data
LINE Company Thailand company cover
LINE Company Thailand
LINE, the world's hottest mobile messaging platform, offers free text and voice messaging + Call
LINE MAN Wongnai company cover
LINE MAN Wongnai
Join our journey to becoming No.1 food platform in Thailand

ขอถามตรงๆ นะครับว่า คุณ lew bias ไปทาง rust หรือเปล่าครับเห็นเสนอ อะไรที่เป็น positive ไปทาง rust อย่างเดียว

https://www.blognone.com/node/148941 ข่าวนี้ Cloudflare ล่มครั้งใหญ่ ในที่มาเอา code ของ rust บรรทัดที่เกิด buffer overflow มาให้ ดูแล้วน่าจะเป็นประเด็นให้เอามาเขียนได้ แต่ไม่เอามาใส่

แต่พอเป็น https://www.blognone.com/node/149140 Cloudflare ล่มย่อย กลับบอก ว่าส่วนของ code ภาษา Lua มีปัญหา

ผมไม่ติดใจเรื่อง bias มันเป็นความชอบส่วนตัว
แต่เป็นสื่อแล้ว bias มันไม่ใช่สื่อที่ดีเท่าไรครับ

ถ้าคุณคิดว่า Blognone คือสื่อไร้ Bias ไร้อคติ คุณมาผิดทางแล้ว ไม่มีนักเขียนข่าวในนี้เคลมว่าไร้ Bias เลยสักคน เผลอ ๆ ดักได้ด้วย และผมชอบมาก 555555555555555555555

ซอส: รุ่นพี่ท่านหนึ่งที่โต้คลื่น Blognone มา 15 ปีช่วยดึงสติ

ผมไม่ชอบคิดไปเองว่าคนอื่นเป็นอย่างไรน่ะครับ มันเสียเวลา มีโอกาสคิดผิดด้วย
ถามตรงๆ ดีกว่าเร็วดี เชื่อถือได้

และ bias แบบนี้ไม่ดีเท่าไร ผมเห็นว่ามันเป็นการปกปิด บิดเบือนความจริง
ไม่ต่างกับที่ข้าราชการประเทศนี้ทำกันเท่าไร

ถ้าคุณไม่เคยสังเกตสไตล์การเขียนข่าวของนักเขียน Blognone ตลอด 10 ปีที่ผ่านมาก็นับว่าคุณพลาดมาก (คุณอยู่ที่นี่มา 17 ปีแล้วนะ หัดหาคำตอบให้ตัวเองบ้าง ไม่ใช่ทุกคำถามที่จะได้คำตอบ ผมนี่ได้ตีมือ User ประจำเพราะไม่ยอมรับตัวเองนี่แหละ) และไม่จำเป็นต้องคิดไปเองด้วยว่าคนอื่นเป็นอย่างไรด้วย (ผมก็ Cite ไว้แล้วนะ ไม่ได้คิดไปเอง เสียหายหาเม้นนั้นไม่เจอ) คำว่า Opinionated ไม่ได้เกิดขึ้นมาเฉย ๆ หรอกนะ

อีกอย่างใครมันจะบ้าอยากจะไปบอก "ความจริง" ถ้าตอบไปแล้วมันทำให้ตัวเองมีปัญหาแบบไม่จำเป็น เหมือนที่คุณกำลังทำอยู่นี่แหละ

คุณไม่เห็นด้วยไม่เป็นไรครับ
เขาไม่ตอบก็ไม่เป็นอะไร ผมก็แค่ทำเป็นไม่รู้เรื่องอะไรเท่านั้น

เหตุที่ผม มีแนวทางแบบนี้ เพราะผมเคยคิดว่าคนอื่นเป็นนู่นนี้มาก่อนน่ะครับ
แต่มันมีผลดีก็คือ
ทำให้ตัวผมเหมื่อนเป็นคนฉลาด (น้ำเต็มแก้ว) แค่นั้น
แต่ผลเสียคือ
ถ้าเกิดความขัดแย้ง แล้วมีเรื่องขุ่นเคือง มันนานกว่าจะจบ

ผมมองแล้วมันไม่คุ้ม เลยเปลี่ยนแนวเป็นแบบนี้ ถึงมันเจ็บ แต่มันจบไว รู้ผลไวกว่า น่ะครับ

สิ่งสำคัญในการพัฒนาตนเอง อย่างหนี่ง การกล้ายอมรับความจริง และกล้าแก้ไข

ตัวอย่างใกล้ตัวของคนที่ไม่มีการพัฒนาตนเอง มันมีให้เห็นครับ
ex. ข้าราชการประเทศนี้ ไม่กล้ายอมรับความจริง ไม่กล้าแก้ไข มันเลยไม่มีอะไรพัฒนาให้เห็นไงครับ

เมื่อก่อนผมอยากให้คนอื่น สนใจผม เห็นผมเป็นคนฉลาด เก่ง
แต่พออายุมากขึ้น ผมกลับชอบความสันโดษ จะมองผมแบบไหนก็ได้ อย่าเอาความเดือดร้อน ความขัดแย้งมาให้ผมก็พอ แต่ผมก็ยังรักความยุติธรรมอยู่นะ เห็นอะไรไม่ถูกก็ชอบไปยุ่งอยู่ประจำ

เรื่อง สื่อ & bias ในภาพรวมทั่วๆไป ส่วนตัวมองว่า

  1. มนุษย์ทุกคนมี bias
  2. สื่อที่ดีไม่ควรมี bias (จริงๆแต่ก่อนเป็นจรรยาบรรณพื้นฐานของสื่อด้วยซ้ำ)
  3. ถ้าต้องการเป็นสื่อ"ที่ดี" ก็ต้องพยายามขจัด bias
    การไม่มีความคิดจะขจัด bias = ไม่คิดจะเป็นสื่อที่ดี
  4. ในโลกปัจจุบันที่ดูเหมือนจะมีคนตั้งตนเป็นสื่อจำนวนมหาศาล จนไม่ค่อยมีใครสนใจจรรยาบรรณกันแล้ว
    ก็คงต้องข้ามไปดูว่า สื่อหัวนั้นตั้งใจจะวาง position ตัวเองว่าเป็นสื่อที่ดีรึเปล่า?
    ถ้าต้องการจะเป็นสื่อที่ดี ก็ต้องพยายามขจัด bias
    ซึ่งแน่นอนอาจจะไม่หมด มีหลุด หรือ ไม่รู้ตัว ตามประสามนุษย์
    แต่อย่างน้อยต้องพยายามขจัด bias อย่างสุดกำลัง
    ไม่ใช่เห็นว่าการมี bias อย่างจงใจเป็นสิทธิของสื่อ

ปล. ย้ำว่าเป็น คหสต. จากคนที่เคยเห็นยุคสื่อยังมีแนวคิดถือจรรยาบรรณ
พยายามขจัด bias ตามจรรยาบรรณ
ปล2. ย้ำว่าเป็นมุมมองงของวงการสื่อ/อินฟลูฯทั่วไป ไม่เจาะจงถึงเวปนี้
แต่มาเห็นกระทู้นี้เลยขอระบายหน่อย 😅

มันจะดีมากน่ะแหละถ้าสื่อจะไม่มีอคติ แค่ผมไม่เคยเห็นใน Blognone เลยสักกะที และไม่น่าจะใช่เพราะจะทำยอด Engage ด้วย (เพราะถ้าจริงจะตลกมาก ที่เห็นคอมเม้นก็หน้าเดิม ๆ กันทั้งนั้น ผมก็ด้วย) เลยคิดว่าลดความคาดหวังและไปอ่านข่าวเพิ่มเติมเองน่าจะง่ายกว่า อนึ่งพลวัตการแสดงความคิดเห็นของคนใน Blognone ก็หลากหลายพอที่ผมจะไม่ห่วง คนเขียนข่าวชักจูงคนไม่ได้แน่ ๆ

เอาง่าย ๆ ผมเกลียด Freedesktop.org เข้ากระดูกดำ (ในโลกคอมพิวเตอร์ ผมเป็นสายอนุรักษ์นิยม แต่พวกเวรตะไลนี่ชอบพัง Compat ประจำ) แต่ผมเห็นคนยกยอปอปั้น Wayland หรือ GNOME ก็ไม่ได้เดือดร้อนอะไรนะ คิดเอาว่าขนาดโดนสังคมกดดันให้มาใช้ Wayland ก็ต้องทนเอา

เราเชื่อมั่นในความไม่เป็นกลาง อย่าลังเลที่จะใส่ความคิดเห็นส่วนตัวถ้าเห็นสมควร อย่างไรก็ตาม คุณต้องทำใจรับไว้ด้วยว่าเราก็เปิดโอกาสให้ความคิดเห็นที่ตรงข้ามกับคุณเช่นเดียวกัน

Blognone—Writing Guideline

https://www.blognone.com/node/148941 ข่าวนี้ Cloudflare ล่มครั้งใหญ่ ในที่มาเอา code ของ rust บรรทัดที่เกิด buffer overflow มาให้ ดูแล้วน่าจะเป็นประเด็นให้เอามาเขียนได้ แต่ไม่เอามาใส่

มันไม่ได้เกิด buffer overflow นี่ฮะ Rust เลือกที่จะ panic ตัวเองไปเลยไม่ทำงานต่อไปแบบผิดๆ ตอนที่ข้อมูลไม่เป็นไปตามที่คนเขียนบอก compiler ว่า "this is ok, trust me" ซึ่งสุดท้าย Rust ก็แค่ยอมเชื่อตอน compile แต่ตอนรันจริงมันก็แอบเช็คอยู่ดี แล้วพอเช็คว่าไม่เป็นไปตามนั้นมันก็ panic ไม่ใช่ทำงานต่อไปด้วยข้อมูลที่ไม่ควร

ที่พลาดไปคือไม่ได้ handle ให้มีการแจ้งออกมาดีๆ ว่าพังเพราะอะไรตรงไหนเท่านั้นเอง

https://blog.cloudflare.com/18-november-2025-outage/#memory-preallocation

Each module running on our proxy service has a number of limits in place to avoid unbounded memory consumption and to preallocate memory as a performance optimization. In this specific instance, the Bot Management system has a limit on the number of machine learning features that can be used at runtime. Currently that limit is set to 200, well above our current use of ~60 features. Again, the limit exists because for performance reasons we preallocate memory for the features.

คือปกติ feature data object มันมีไม่เกิน 60 elements
ฉะนั้น programmer เลย จอง memory ไว้สำหรับ 200 elements เพราะคิดว่ายังไงก็พอ

แต่ API ที่ใช้ function นี้ มันถูกแก้ทำให้ feature data object ที่ส่งไปให้ function นี้มันเกิน 200

ทำให้ code ที่ error พยายามจะ access elements ที่ 201+
แต่ OS ก็ตอบมาว่า segmentation fault core dump
Rust ก็เลย panic
อาการแบบนี้ผมเรียก buffer overflow น่ะครับ

สำหรับคนเขียนแบบนี้น่ะ ถือว่าถูกต้องแล้ว ไม่จำเป็นต้องแก้ code ( แต่ผมก็สงสัยอยู่ดีว่าทำไมไม่ใช้ Vec มันก็คล้ายๆ Array แต่ dynamic allocation ได้ แค่มันมีข้อเสียนิดหน่อย )
แต่คนใช้ รู้เท่าไม่ถึงการณ์

case นี้ภาษาที่มี API access memory โดยตรงได้ ก็มีให้เห็นครับ
ต่อให้เขียนด้วย C, C++ มันก็เจออาการเดียวครับ

แต่ถึงคนเขียนไม่ได้ผิดพลาดอะไร ภาษาก็ไม่ได้ผิดอะไร
มันก็ buffer overflow อยู่ดี

In this specific instance, the Bot Management system has a limit on the number of machine learning features that can be used at runtime. Currently that limit is set to 200, well above our current use of ~60 features. Again, the limit exists because for performance reasons we preallocate memory for the features.

Again, the limit exists because for performance reasons

Dev ตั้งใจให้เป็นแบบนี้อยู่แล้ว เพราะไม่คิดว่ามันจะเกิน จึง Design แบบนี้ และ Rust เองก็ถูกออกแบบให้ Panic เมื่อ unwrap แบบไม่มี value มาตั้งแต่ต้น จึง Panic และ Crash ออกมา มันไม่ได้ Buffer Overflow แต่อย่างใด เพราะอาการ Buffer Overflow จะปล่อยให้หน่วยความจำถูกเขียนทับได้ และโปรแกรมก็จะรันต่อไปจนกว่าจะถูกป้องกันโดยตัวป้องกันหน่วยความจำ (Segfault) หรือสิ้นสุด Flow แบบเงียบ ๆ ไปเลย (ซึ่งน่ากลัวมากถ้าเกิดจากการถูกโจมตี ทำให้โปรแกรมนั้นถูกยึดไปเลย) ซึ่ง Rust ก็ไม่ได้ปล่อย เครื่องไม่ได้แม้กระทั่งดีด Segfault (Hardware Memory Protection) ออกมาด้วยซ้ำ เป็น Error จากฝั่ง Rust เอง ไม่เห็น Mention Segfault เลยสักบรรทัด นอกจากว่าคนเขียนบทความฝั่ง Cloudflare โกหก

thread fl2_worker_thread panicked: called Result::unwrap() on an Err value

Error Handling. The Rust Programming Language.

สรุป Rust ผิดเหรอกรณีนี้ที่ยอม Crash ออกมา หรือคุณมองว่าการที่ Rust ปล่อย panic!() คือ Buffer Overflow? (ซึ่งผิดมหันต์)

อนึ่ง

Unrelated to this incident, we were and are currently migrating our customer traffic to a new version of our proxy service, internally known as FL2. Both versions were affected by the issue, although the impact observed was different.

เนื้อข่าวบอกตั้งแต่เริ่มต้นเลยว่ากำลังอยู่ในระหว่าง Migrate ระบบ Bot ไปยัง FL2 (ที่เขียนด้วย Rust) ดังนั้นข้อผิดพลาดมันยังไม่ได้ไปถึง FL2 เลยด้วยซ้ำในช่วงเกิดเหตุ แต่ระหว่างทางมันเกิดพอดีเลยทำให้ได้เจอข้อผิดพลาดของโปรแกรมนี้ ที่ต่างจากตัว FL (1) ออกไป

Customers deployed on the new FL2 proxy engine, observed HTTP 5xx errors. Customers on our old proxy engine, known as FL, did not see errors, but bot scores were not generated correctly, resulting in all traffic receiving a bot score of zero. Customers that had rules deployed to block bots would have seen large numbers of false positives. Customers who were not using our bot score in their rules did not see any impact.

เนื้อหาบอกชัดเจนว่ากรณีของ FL2 (Rust) ปล่อยปุ๊บระบบล่มทันที แต่ FL1 (Lua) กลับไม่เจอ Error แต่พบว่า Bot Score ปล่อยค่าออกมาไม่ถูกต้องและเกิด False Positive ขึ้นจำนวนมากจนต้องสืบสวนต่อและเผอิญไปเจอว่า FL2 (Rust) ไม่ยอมปล่อยให้รันต่อเมื่อค่าไม่ถูกต้องจึง Panic ออกมา ผมยังหาความเชื่อมโยงเลยว่า Rust เป็นปัญหาอย่างไรกับ Incident ครั้งนี้

https://en.wikipedia.org/wiki/Buffer_overflow

Buffer_overflow

A จองไว้ 8 elements
แต่ใส่ไป 9 element
และ process พยาม access ตัวที่ 9
โชคดีที่ตอนล่ม
B มันไม่ใช่ของ process นั้น OS มันเลยแจ้ง error
แล้ว API language ก็เอา error code มา handle
แต่ถ้า B เป็นของ process นั้น OS จะไม่แจ้ง error และอาจจะไม่จบแค่ล่ม

แต่จากนี้ก็ไม่แน่ใจ ว่าแจ้งผ่านอะไร
คิดว่าน่าจะเป็น signal หรือ interrupt อะไรสักอย่าง
ซึ่งผมก็ไม่แน่ใจอีกว่ามันคืออะไรกันแน่

ส่วนตัวผมยังคิดว่ากรณีนี้ไม่นับเป็น buffer overflow นะฮะ กรณีของ buffer overflow เท่าที่ผมจำได้และเข้าใจจะเกิดขึ้นเมื่อมีการเขียนลง memory เกินจากที่ออกแบบไว้เท่านั้น ต้องล้นออกไปแล้วจึงสร้างความเสียหายได้

แต่จากกรณีนี้ (เท่าที่เดา ผมไม่รู้ว่า Cloudflare เปิด source ตรงนี้หรือไม่ ได้แค่แกะจากเท่าที่เห็นที่เค้าแปะไว้ในบล็อก) มีการจองหน่วยความจำไว้สำหรับ 200 แล้ว แต่เมื่อพยายามจะเพิ่มเข้าไปมากกว่า 200 ด้วยฟังก์ชัน .append_with_names() ที่ return type เป็น Result (เพราะใน trace มีบอกว่ามีความพยายามเรียก .unwrap() กับ Error)

สิ่งที่เกิดขึ้นคือฟังก์ชัน .append_with_names() return ค่ามาเป็น Result.Error ซึ่งหมายความว่า append ไม่สำเร็จ
แม้จะมีข้อมูลไม่มากพอว่ามันไม่สำเร็จตั้งแต่ตอนพยายาม append เข้าไป หรือ append เข้าไปได้แล้วแต่มีพยายามเรียกกลับมาอ่านเลยพัง ความเป็นไปได้ที่จะ append เข้าไปได้แบบ buffer overflow ใน Rust อ้างอิงจากลักษณะโค้ดที่เปิดมามันต่ำมากจนผมไม่คิดว่าจะเป็นสิ่งที่เกิดขึ้นในกรณีนี้ (คือไม่ใช่จองไว้ 8 ใส่ไป 9 แล้วพังตอนพยายามอ่าน 9 แต่พังตั้งแต่พยายามใส่ 9) เมื่อยังไม่ได้ append จนล้น memory ที่ใส่ไว้ผมจึงไม่เห็นด้วยที่จะเรียกว่าเกิด buffer overflow ฮะ

ทั้งนี้ผมก็ไม่พอใจในโค้ดที่เค้าเปิดออกมาอยู่บ้าง เพราะตัว Features.append_with_names() เองก็ return type เป็น Result อยู่แล้ว และตัว fetch_features() เองก็ return type เป็น Result ด้วยเช่นกัน อย่างน้อยมันควรจะ forward Error ต่อไปให้สุดทางไม่ใช่ชิง panic ไปเฉยๆ เลยแบบนี้ แต่จากที่เค้าวิเคราะห์กันคือถึงทำแบบนั้นสุดท้ายแล้วระบบก็น่าจะล่มอยู่ดีเพราะยังไงมันก็ทำงานไม่สำเร็จ แค่ graceful หรือเปล่าเท่านั้นเอง

อ๋องั้นผมยังสรุปไม่ได้ว่าเป็น buffer overflow
เพราะผมไม่รู้ที่มาของ error code ที่เขาไม่ได้ handle
ว่ามันมาจาก OS หรือ api assertion

ผมเชื่อครึ่งเดียวนะครับ เพราะผมไม่คุ้นกับ Rust api

จะให้ 100% ผมต้องเห็น source code ของ Rust ที่บอกที่มาของ error code ได้ ก่อนน่ะครับ

ผมกลับมาทันมั้ยฮะ 😅

ในส่วนของ Result.unwrap() จะอยู่ที่นี่ฮะ จะเห็นว่ามันจะถอดค่าออกมาเฉยๆ หากเป็น Result.Ok ส่วนถ้าเป็น Result.Error มันจะเรียกไป unwrap_failed() ที่นี่ด้วย message เดียวกับที่ Cloudflare เอามาโชว์ "called Result::unwrap() on an Err value" ซึ่งข้างในก็เป็นเพียงคำสั่งให้ panic!() เท่านั้น ไม่ได้มีตรงไหนหลุดไปถึง OS ฮะ

Language api มันสามารถเอา error code จาก OS มา handle ได้
แล้วเปลี่ยน error message เพื่อให้ programmer เข้าใจง่ายมากขึ้นน่ะครับ (อันนี้ไม่แน่ใจนะครับว่า rust เป็นแบบนี้หรือเปล่า)

อันนี้ดีกว่า C/C++ เยอะที่ print error message ของ OS เลย
แค่ segmentation fault core dumped ผมจะรู้ไหมว่าต้องแก้ตรงไหน

สบายใจได้ โค้ดที่แนบมาไม่ได้ใช้ OS API
https://doc.rust-lang.org/beta/src/core/result.rs.html#1227-1235
https://doc.rust-lang.org/src/core/option.rs.html#1012

อนึ่ง Segfault ของจริงบน Rust (เกิดจาก Stack Overflow) ซึ่งก็อ่านไม่รู้เรื่องพอ ๆ กันกับ C/C++
https://github.com/rust-lang/rust/issues/79935

Trivia ของ Rust เมื่อ Declare อะไรก็ช่าง จะมี Trick อย่างหนึ่งคือ Rust จะครอบทับ Page ของหน่วยความจำด้วย Guard Page (เอาง่าย ๆ ก็คือกับดักหน่วยความจำ) ที่ผูกกับ OS ไว้ ถ้าเกิดเหตุการณ์ที่โปรแกรมโดนหลอกให้เกิด Buffer Overflow เมื่อเขียนโดน Address ที่มีตัว Guard Page อยู่ก็จะทริกเกอร์ Segfault ทันที

แต่ถึงกระนั้น Rust ก็ไม่ได้ทำให้การ Debug Segfault ง่ายลงบน Production ต้องไป Hook กับ Debugger หาบั๊กอยู่ดี แค่ช่วยให้เกิด Segfault มากที่สุดถ้าเกิด Buffer Overflow เฉย ๆ

ยังสรุปไม่ได้อยู่ดีครับ

  • คือต้องรู้ error code ที่ programmer discard ใน code ที่มีปัญหาก่อนครับ
  • แล้วไล่ถอยกลับไปจนเจอที่มาจริงๆ
  • ที่เอามาให้ดูมันเป็น default generic? เวลา program run จริงๆ อาจจะไม่มาตรงนี้
  • และใน link github issue เขาบอกอยู่ว่ามันกัน SIGSEGV ไม่ได้บางกรณี

คือต้องรู้ error code ที่ programmer discard ใน code ที่มีปัญหาก่อนครับ

โปรแกรมเมอร์ที่ทำโค้ดเขารู้แล้ว!! หรือจะต้องให้เขา Open Source ออกมาถึงจะสาแก่ใจคุณ

ที่เอามาให้ดูมันเป็น default generic? เวลา program run จริงๆ อาจจะไม่มาตรงนี้

เดี๋ยวนะ ไอ้ตัว Code ที่เขา Return มามันก็มาจาก Result จะให้มันจะมาจากไหนอีก คนที่ทำโปรแกรมจะเขียนอะไรก็เรื่องของเขา แต่เรารู้ว่าเขาใช้ Standard Lib ในการเอาผลลัพธ์ออกมาด้วย Result และ Rust ก็ปิดจบด้วย Panic (Panic ≠ Overflow) จะมา Overflow อะไรก่อน ความผิด (หรือความตั้งใจให้มันผิด) มันอยู่ที่โปรแกรมเมอร์โน่น จะบอกคนอื่นหยุดคิดไปเอง ก่อนอื่นให้บอกตัวเองก่อนเลย

และใน link github issue เขาบอกอยู่ว่ามันกัน SIGSEGV ไม่ได้บางกรณี

จะสื่ออะไร จะบอกเหรอว่า "ไหนว่า Rust เพอร์เฟกต์" อย่างนั้นเหรอ อ่านก่อนตอบก็ดีนะว่าที่ผมยกมาให้ดูมันคือ Segfault/Overflow ของจริง ไม่ใช่สิ่งที่คุณโยงอะไรก็ไม่รู้เข้ามาหากันแล้วมาบอกว่าเป็น Overflow งงกับแนวคิดของคุณมากเลยตอนนี้

  • ผมสรุปไม่ได้เพราะผมยังไม่รู้สิ่งบางสิ่ง ที่ทำให้มันชัดเจนได้ครับ ซึ่งก็คือ error code สร้างมาได้อย่างไร
  • เวลาผมอยากรู้ว่า value ที่ return มาจาก function มันต้นตอมาจากอะไร เราก็ต้องรู้ก่อนว่ามันคืออะไร แล้วค่อยไล่ program กลับไปสนเจอต้นตอมันจริงๆ น่ะครับ
  • คุณลองอ่าน reply ของ nagisa ใน issue ดูครับ เขาก็บอกว่า การตรวจสอบของ rust มันใช้ไม่ได้บางกรณี
  • คือกรณีนี้สำหรับผมข้อมูลมันไม่พอให้เชื่อได้ 100% น่ะครับว่ามันไม่ได้เกิด seg fault

ถ้าคุณยังไม่สามารถทำความเข้าใจได้ว่า Error ดังกล่าวไม่ได้เกิดจาก Segfault คุณมีปัญหาที่ใหญ่กว่าการไม่เชื่อว่า Rust จะแก้ปัญหาหน่วยความจำได้แล้วล่ะ และหากคุณไม่เข้าใจว่า Segfault มีประโยชน์อย่างไรใน Computing คุณมีปัญหาใหญ่กว่าการคิดว่าการใช้ Rust ไม่จำเป็นอยู่

งงครับ ถ้าคุณ rattananen เข้าใจ comment ของ big50000 จริงๆ คุณ rattananen ก็ไม่น่าจะ reply แบบนี้นะครับ

เพราะอาการ Buffer Overflow จะปล่อยให้หน่วยความจำถูกเขียนทับได้ และโปรแกรมก็จะรันต่อไปจนกว่าจะถูกป้องกันโดยตัวป้องกันหน่วยความจำ (Segfault) หรือสิ้นสุด Flow แบบเงียบ ๆ ไปเลย (ซึ่งน่ากลัวมากถ้าเกิดจากการถูกโจมตี ทำให้โปรแกรมนั้นถูกยึดไปเลย) ซึ่ง Rust ก็ไม่ได้ปล่อย เครื่องไม่ได้แม้กระทั่งดีด Segfault (Hardware Memory Protection) ออกมาด้วยซ้ำ เป็น Error จากฝั่ง Rust เอง ไม่เห็น Mention Segfault เลยสักบรรทัด นอกจากว่าคนเขียนบทความฝั่ง Cloudflare โกหก

ถ้าจะพูดให้ถูกต้องคือ Rust ทำงานได้ถูกต้องแล้วในกรณีนี้ ในการป้องกัน buffer overflow ไม่ให้เกิดขึ้น Rust ทำตัวถูกแล้วในการจำกัดการใช้ memory จากที่ programmer เลือก allocate เพียงแต่ฝั่ง programmer (และ programmer ภายนอกระบบ)เองต่างหากที่ไม่ได้ allocate memory ไว้มากพอเผื่อการใช้ในกรณีแบบนี้

อันนี้จาก https://en.wikipedia.org/wiki/Buffer_overflow ที่คุณ rattananen ทิ้งไว้ให้เองนะครับ

In programming and information security, a buffer overflow or buffer overrun is an anomaly whereby a program writes data to a buffer beyond the buffer's allocated memory, overwriting adjacent memory locations.

เพราะผมไม่เข้าใจ reply ของเขาน่ะครับ เหตุผลอยู่ตรงนี้ https://www.blognone.com/comment/1348280#comment-1348271

ปกติเวลาผมทำความเข้าใจอะไร ส่วนมากจะไม่สามารถ ทำได้ด้วยการอ่านครั้งเดียว
แต่ของเขาผมอ่านไป เกือบสิบรอบผมก็ยังงงอยู่

แล้วพอคุณ hisoft มาชี้เป้าผมเลยเข้าใจขึ้นมาหน่อย
เอาจริงๆ ผมว่ามันควรจะจบไปครั้งแต่ผมตอบคุณ hisoft แล้วน่ะครับ
พอคุณ big50000 มาต่อแบบเดิม ผมก็เล่นเลยน่ะครับ

เพิ่งผ่านมาเห็น ขอตอบเสริมไว้หน่อย

อย่างที่หลายคนตอบไปแล้วว่า ไม่ใช่ buffer overflow เพราะ พฤติกรรม ของ buffer overflow คือ การเขียนข้อมูลเกินออกไปจากพื้นที่หน่วยความจำที่จองไว้

ในกรณีนี้ ผมมองว่า พฤติกรรม มันคือ out-of-bound access มากกว่า เช่น ในบางภาษาจะมี index out-of-bound exception

ส่วน segmentation fault เป็น การตอบสนอง ระดับ OS จาก out-of-bound access – ซึ่งคิดว่าในกรณีนี้ ตัวภาษา Rust น่าจะตรวจเจอและดักไว้ก่อน ยังไปไม่ถึง OS เลยด้วยซ้ำ จึงยังไม่เกิด segmentation fault

แล้วกรณีเกิดอะไรขึ้นบ้าง?

  • ผลจากการที่ Rust ตรวจเจอ พฤติกรรม out-of-bound access จึง ตอบสนอง และส่งผลให้ทำงานไม่สำเร็จ (อย่างไรไม่รู้) แล้ว append_with_names() แสดง พฤติกรรม ด้วยการคืนค่ากลับมาตาม type ที่เป็น Result<T, E> โดยมีค่าเป็น Err(E)
  • หลังจากนั้น เมื่อสั่ง Result.unwarp() เจอค่า Err(E) แล้วไม่มีการ handle ไว้ ทำให้ Rust ตอบสนอง อีกครั้งด้วยการเกิด พฤติกรรม panic จนนำไปสู่จุดจบของโปรเซส

สรุปว่า

  • ไม่ใช่ทั้ง buffer overflow และ segmentation fault
  • แต่เป็น out-of-bound access อันนำไปสู่ panic ครับ

ผมไปลองมาแล้วครับ ควรจะเป็นอย่างที่คุณว่า test rust1

ส่วน rust กัน buffer overflow ได้ไหม ก็คิดว่าน่าจะได้ test rust2
แต่แบบนี้แสดงว่า มัน assert ให้ตอน runtime ด้วย ไม่ใช่แค่ตอน compile อย่างเดียว
ผมนึกว่ามันกันให้แค่ตอน compile อย่างเดียว

ผมไม่คุ้นกับ rust น่ะครับ
จะทำความเข้าใจก็ต้องใช้ code ทำความเข้าใจน่ะ

ผมแนะนำว่า ให้คุณ big50000 หยุดพักสักหน่อยครับ
คุณปลุกความชั่วร้ายของผมขึ้นมา และผมสนุกกับมันมาก
การที่ได้เห็นคนเป็นไปตามที่ผมคิด โดยที่ผมไม่ได้สั่ง (ปั่นหัว) เป็นอะไรที่เลวมากในตัวผม
คือผมชอบปั่นหัว คนที่รู้ครึ่งๆ กลาง อารมณ์ไม่นึ่่ง
และผมก็เล็งคุณมานานแล้วด้วย
และคุณก็โดนผมปั่นง่ายที่สุดที่เคยมีมา คุยกับคุณผมสนุกจริงๆ และขอโทษด้วย

และผมมีความลับที่จะอีกอย่างคือ https://www.blognone.com/comment/1348084#comment-1348084

ย่อหน้าที่สอง เหมือนผมจะพูดถึงตัวเอง แต่นั้นคือสิ่งที่คุณแนะนำให้ทำ หรือสิ่งที่คุณเป็นอยู่ หรือหมายถึงคุณนั้นเอง

ผมแนะนำให้คุณอาบน้ำ นอน กินยานอนหลับ จะได้หลับสบายหน่อย คืนนี้

อย่าตอบผม เพราะมันคือสื่งที่ผมคาดการไว้อยู่ อย่าให้เป็นไปตามที่ผมคาด

ผมขอบคุณมาก ทำให้ผมรู้สึกเป็นวัยเยาว์อีกครั้ง

คือตอนนี้ คำค่าทั้งหลายมาที่ผม ผมจะถือว่าเป็นคำชม
ส่วนคำชมก็คือคำชมนะครับ

ถ้าคุณมีความสุขก็ดีแล้วล่ะ เพราะผมไม่ได้คิดอะไรเลยกับคุณ ผม (เป็นไปได้ว่ารวมถึงคนอื่น ๆ ในนี้ด้วย) แค่อยากเข้าใจในสิ่งที่คุณกำลังแสดงความคิดเห็นว่าต้องการสื่อถึงอะไร ถ้าการกระทำของคุณต่อผมที่ผ่านมาเป็นการปั่นหัวล้วน ๆ และคุณคิดว่าทำมันสำเร็จและคุณมีความสุขกับมันก็ดีแล้ว ผมเองก็รับฟังและดูแลคนป่วยจิต เป็น Neurodivergent ก็เยอะ และทำมาทั้งชีวิตแล้ว เรื่องนี้จิ๊บจ๊อยมากสำหรับผม (มีหลักฐานนะถ้าอยากเห็น เพื่อนใกล้ตัวผมก็เป็นไบโพลาร์แล้วคนหนึ่ง นั่งฟังเขาบ่นติดต่อกันสามชั่วโมงก็ทำมาแล้ว) ผมไม่ถือสาคน ติดแค่ว่าผมชอบทางไอทีและโปรแกรมมิ่งมากกว่า แต่ก็คิดจะย้ายสายไปเรียนสายจิตวิทยาอยู่เหมือนกัน

ถ้าว่ากันตาม ตรรกะ สิ่งที่ควรทำคือคุณไม่ตอบผมเพราะมันจะได้ไม่เป็นไปตามที่ผมคาด ผมจะได้คิดผิดไป

ทำแบบนี้มันเป็นเครื่องยืนยันมากขึ้นว่า คุณใช้อารมณ์เหนือตรรกะ น่ะครับ

คือผมมีเหตุที่เชื่อคุณไม่ได้น่ะครับ

  • คุณ distract ตัวเองและคนอื่น โดนการคิดว่าคนอื่นเป็นอย่างที่คุณคิดมากเกินไป ลองอ่าน post ตัวเองดู ไม่ใช่แค่กับผม แต่กับ post คนอื่นที่คุณ object ด้วย คุณจะกล่าวถึง บุคคลที่สอง เป็นนั้น เป็นนี้เยอะมาก ซึ่งไม่เกี่ยวกับเนื้อหาเลย
  • และบ่อ่ยครั้งคุณอ้างถึงที่คุณเข้าใจอยู่คนเดียว แล้วไม่อธิบายบ้าง ไปหาอ่านเองบ้าง นี้ก็ไม่ประโยชน์อะไร
  • เอาสองอันมารวมกัน ทีนี้มันทำให้ผมไม่สามารถ หาใจความได้ว่าอะไรคือ สิ่งที่ผมผิดไป

ลองเทียบ post ตัวคุณเองกับ ของคุณ hisoft https://www.blognone.com/node/149199#comment-1348126

อันนีเขาพยายาม focus สิ่งที่ผมพลาด ถึงผมไม่คุ้นกับ rust แต่มันทำให้ผม hint บางอย่าง
ทำให้ผมต้องเชื่อ แต่มันยัง 50% เพราะมีบางอย่างที่มันยังคลุมเคลืออยู่
และผมก็บอกวิธีให้ผมเชื่อ 100% ไว้แล้ว

แต่คุณไม่สนใจ เอาอะไรมาให้มันบานปลายอีกก็ไม่รู้ พิสูจน์สิ่งที่ผมกังขาอยู่ได้ก็จบแล้ว
ถึงไม่พิสูจน์ผมก็ยังเชื่อว่าตัวเองผิด 50% อยู่มันก็ไม่ได้มีปัญหาอะไร

คือถ้าจะตอบผม เอาแค่เรื่องที่ผมกังขาอยู่ก็พอนะครับ
คือถ้านอกเรื่องต่ออีก ผมจนมุมแน่นอน เพราะผมจะคิดว่าคุณอยู่ระดับเดียวกับ นายแบก/นางแบก พรรคการเมือง ผมไม่รู้จะอธิบายอย่างไรแล้วน่ะ

ถูกต้อง ผมเป็นคนที่ใช้อารมณ์เหนือเหตุผล เพราะผมเป็นคนไม่เชื่อในเหตุผลมาตั้งแต่แรก ผมเจอกับคนประเภทที่บอกว่าเชื่อในเหตุผลแต่เมื่อปฏิบัติตัวจริงกลับทำตรงกันข้ามมาทั้งชีวิต การประเมินความเข้าใจและอคติก็เป็นส่วนหนึ่งในการเลือกสื่อสารของผมเช่นกัน ดังนั้นการที่คุณไม่ได้ทำความเข้าใจ (หรือไม่สามารถ หรือไม่ยอมทำความเข้าใจ) กับ Reference ที่ผมส่งให้ย่อมทำให้ผมสงสัยในพื้นฐานและอคติของคุณไปด้วยเป็นเรื่องธรรมดา ถ้าเป็นเพราะคุณไม่สามารถทำความเข้าใจได้เลย มันก็ยังพอหาทางช่วยทำให้เข้าใจได้ แต่ผมพยายามตอบคุณด้วยข้อมูลมาหลายโพสต์หลายข่าวมาก ๆ แต่คุณก็เหมือนจะยังไม่เข้าใจ (หรือไม่ยอมเข้าใจ) สักที และจากประสบการณ์การสื่อสารของผม การสื่อสารของคุณมันไม่เหมือนคนที่พยายามทำความเข้าใจเลยสักนิดเดียว Vibe ของคุณบ่งบอกได้อย่างเดียวคือการแสดงข้อกังขาที่ไม่ต้องการรับรู้คำตอบใด ๆ ไม่มีความคล้ายคลับคลากับการแสดงข้อสงสัย มันทำให้ผมกำลังมองว่าคุณกำลังเป็นอีกอย่างหนึ่งที่คล้ายกับกลุ่มบุคคลที่ผมกำลังจะกล่าวถึงในลำดับถัดไปนี้

ให้เปิดเผยตามตรง ผมไม่เคยสนใจภาษา Rust ด้วยซ้ำ (ผมสนใจภาษาสคริปต์ที่เขียนง่าย ๆ เสียส่วนใหญ่) จนกระทั่งวันที่มันเข้ามาใน Linux Kernel และชุมชนเริ่มเดือด ผมเริ่มแปลกใจ จึงเริ่มได้ศึกษาอย่างจริงจัง ประกอบกับเหตุการณ์พวกคนเก่า ๆ ใน Linux Contributor ที่ประท้วงการเข้ามาของ Rust ยิ่งทำให้ผมอยากศึกษามากขึ้นไปอีก เพื่อจะได้ทำความเข้าใจถึงข้อจำกัดของมันว่าทำไมภาษา Rust จึงถูกต่อต้านหรือถูกมองว่ายังไม่จำเป็น แต่เผอิญว่าด้วยความสามารถสูงสุดของผม ได้เจอมันน้อยเกินกว่าที่จะเอามาเป็นข้อเสียหรือความไม่จำเป็นที่จะนำ Rust เข้าสู่ Kernel ได้ และดูเหมือนเกมการเมืองเหมือนกับทุก ๆ ครั้งที่เจอมา พวกนี้อธิบายเป็นร้อยรอบก็ไม่ฟังอะไรหรอก เข้าหูซ้ายทะลุหูขวา แต่คุณดูต่างออกไป ผมจึงลองอธิบายให้คุณ แต่ก็อย่างที่เห็น หลายข่าวหลายหน ไม่ใช่แค่ผมที่พยายามอธิบายให้คุณ ลองทบทวนดูว่ามีกี่คนในนี้แล้วที่อธิบายให้คุณแล้วแต่คุณก็แสดงข้อกังขาเดิม ๆ ไม่เลิก จนถึงโพสต์นี้ที่คุณเลือกถามคุณลิ่วว่ามีอคติอะไรหรือเปล่า ซึ่งก็แปลกดีที่ถามในนี้กับบล็อกเกอร์แห่ง Blognone ผมจึงตอบคุณไปแบบนั้น ถ้าเป็นคนอื่นที่ปกติก็น่าจะล้มเลิกความพยายามกับคุณไปแล้ว แต่เสียดายหน่อยที่ผมมีอาการทางประสาทที่ชอบกลับมาติดตามอะไรเก่า ๆ บ่อย ๆ ชอบสอดเรื่องชาวบ้าน (แนบหลักฐาน) และมีความจำทบทวน (ฉะนั้นพฤติกรรม Assertion Dominance ใช้กับผมไม่ได้) คุณจึงได้เจอกับคนเช่นผมบ่อย ๆ และผมสามารถสัญญาได้ว่าตราบใดที่คุณยังทำพฤติกรรมเดิม ผมก็จะตามตอบคุณแบบไม่เลิกด้วยความเคารพเช่นกัน

ปล. คุณลิ่วน่าจะได้หลายหัวเราะมากในข่าวนี้

ผมจนมุมแล้วล่ะครับ แล้วผมขอถอนคำพูดว่า เป็นระดับเดียวกับนายแบก นางแบบพรรคการเมืองด้วยนะครับ ผมไม่อยากให้ใครเป็นแบบนั้น

ผมมีจุดประสงค์อื่นนอกจาก ปั่นหัวคุณน่ะครับ คืออยากให้คุณใช้อารมณ์ให้น้อยลง
ไม่งั้นผมจะบอกคุณทำไมว่าผมกำลังปั่นหัวคุณอยู่ ที่ใช้วิธีนี้เพราะคิดว่าบอกตรงๆ คงไม่ได้ผล

ผลก็ออกมาก็ดูแล้ว น่าจะมีภูมิกันมากขึ้น คุณเริ่มมองตัวเองมากขึ้น เท่านี้ก็พอได้

และผมยังแสดงให้คุณดูว่า คนเราน่ะ มีอะไรหลายอย่างในตัว และไม่จำเป็นต้องเป็นเอกภาพ มันเดายาก ถึงเราเดาถูก แต่ถ้าเขาไม่ยอมรับ เราก็ผิดอยู่ดี

ผมน่ะมีวิธีการหาคำตอบของผมเอง เพราะบางทีผมทำแบบคนอื่นไม่ได้ คนอื่นก็อาจทำแบบผมไม่ได้ วิธีใครวิธีมัน (แต่กรณีนี้ของผมมันยังไปไม่ถึงคำตอบเท่านั้น)

สุดท้ายที่ผมทำทั้งหมดน่ะคือตัวผม ทั้งหมด ฉลาดบ้าง โง่บ้าง ดี เลวบ้าง ล้วนไม่ได้เสแสร้ง แต่ผมจัดการมันได้ อะไรที่คุณเห็นว่าไม่ดี อย่าเลียนแบบนะครับ ไม่งั้นก็ไม่ต่างอะไรกัน

รู้สึกดีกว่าเห็นคนถูกปั่นหัว ก็คือการเห็นความพัฒนาน่ะครับ

ปีหน้าอาจจะเจอกันใหม่