Rust: Safe by Design ไม่ได้แปลว่า “กันแฮกได้”
เวลาพูดว่า Rust เป็นภาษา “Safe by Design” หรือ “Memory Safe”
หลายคนมักเข้าใจทันทีว่า
มันคือภาษาที่ ปลอดภัยจากการถูกแฮก
ความเข้าใจนี้ ไม่ถูกต้อง
คำว่า Safe ใน Rust
ไม่ได้หมายถึงความปลอดภัยจากผู้โจมตีโดยตรง
แต่มันหมายถึง ความปลอดภัยของหน่วยความจำ (Memory Safety)
ระหว่างที่โปรแกรมกำลังทำงาน
พูดอีกแบบคือ
Rust ป้องกันโปรแกรมจาก “ความผิดพลาดของตัวมันเอง”
ไม่ใช่ป้องกัน hacker โดยตรง
🚜 ปัญหาที่แท้จริง: คอมพิวเตอร์ไม่รู้ว่าอะไรควรหรือไม่ควร
ลองเริ่มจากพื้นฐานที่สุด
หน่วยความจำของโปรแกรม
เป็นเพียง พื้นที่ว่างที่สามารถอ่านและเขียนได้
CPU ไม่ได้รู้ว่า
- ตัวแปรนี้ยังมีอยู่หรือไม่
- ตัวแปรนี้ถูกลบไปแล้วหรือยัง
- pointer นี้ยังถูกต้องหรือไม่
CPU ทำตามคำสั่งเท่านั้น
ถ้าคุณบอกให้มันอ่าน address นี้
มันก็จะอ่าน
แม้ address นั้น ไม่ควรถูกอ่านแล้วก็ตาม
นี่คือที่มาของปัญหาคลาสสิก เช่น
- use-after-free
- double free
- dangling pointer
- buffer overflow
- data race
สิ่งสำคัญคือ
ปัญหาเหล่านี้ไม่ได้เกิดจาก hacker
แต่มันเกิดจาก โปรแกรมเมอร์เขียนโค้ดที่ผิดกฎของหน่วยความจำ
ภาษาอย่าง C หรือ C++
ไม่ได้ป้องกันสิ่งเหล่านี้ในระดับภาษา
🚜 ความจริงที่โปรแกรมเมอร์หลายคนต้องเจอเอง
ปัญหาเหล่านี้
ตอนเราเป็นโปรแกรมเมอร์ใหม่ ๆ
แทบไม่มีใครเข้าใจมันจริง ๆ
เราอาจเคยได้ยินคำพวกนี้มาบ้าง เช่น
- dangling pointer
- memory corruption
- race condition
แต่ส่วนใหญ่เรา ไม่รู้ว่ามันร้ายแรงแค่ไหน
ในโลกจริง
หลายคนต้องเรียนรู้จากประสบการณ์ตรง
- โปรแกรม crash
- production พัง
- ระบบล่ม
- ต้องเข้าประชุมอธิบาย incident
ความเครียดของเหตุการณ์แบบนี้
คนที่เคยผ่านจะเข้าใจดี
🚜 Memory Safe หมายถึงอะไร
Memory Safety หมายถึง
โปรแกรมจะไม่สามารถ
- อ่าน memory ที่ไม่ควรอ่าน
- เขียน memory ที่ไม่ควรเขียน
- ใช้ pointer ที่หมดอายุแล้ว
โดยไม่ได้ตั้งใจ
Rust ทำสิ่งนี้ ตั้งแต่ระดับการออกแบบของภาษา
ไม่ใช่
- library
- guideline
- convention
แต่เป็น กฎของภาษา
🚜 Safe by Design หมายถึง: โค้ดผิดจะ compile ไม่ผ่าน
ในหลายภาษา
คุณสามารถเขียนโค้ดที่ ผิดกฎของหน่วยความจำ
และมันยัง compile ผ่าน
แต่ behavior ตอน runtime อาจไม่แน่นอน
ตัวอย่าง conceptual
let r;
{
let x = 10;
r = &x;
}
println!("{}", r);