Google กำลังเขียนและเขียนบางส่วนของ Android ใน Rust เพื่อปรับปรุงความปลอดภัยของระบบปฏิบัติการโดยรวม เทียบกับ C และ C++ อ่านต่อเพื่อทราบข้อมูลเพิ่มเติม!
Android เป็นโซลูชันระบบปฏิบัติการที่สมบูรณ์เกี่ยวข้องกับส่วนที่เคลื่อนไหวจำนวนมาก พูดอย่างกว้างๆ ส่วนต่างๆ เหล่านี้คือระบบนิเวศของแอป แล้วก็ตัวระบบปฏิบัติการเอง ในฐานะนักพัฒนา ภาษาการเขียนโปรแกรมที่คุณเลือกจะแตกต่างกันไปขึ้นอยู่กับส่วนใดของ Android ที่คุณใช้งานอยู่ สำหรับนักพัฒนาแอป Java และ Kotlin เป็นตัวเลือกยอดนิยม สำหรับนักพัฒนาที่ทำงานบนระบบปฏิบัติการและระดับล่างภายในนั้น C และ C++ เป็นตัวเลือกยอดนิยมจนถึงตอนนี้ วันนี้ Google กำลังเพิ่มตัวเลือกที่สามสำหรับนักพัฒนาระบบปฏิบัติการ เนื่องจากขณะนี้โครงการ Android Open Source รองรับภาษาการเขียนโปรแกรม Rust สำหรับการพัฒนาระบบปฏิบัติการเอง
ข้อจำกัดของ C และ C++
ระดับที่ต่ำกว่าของระบบปฏิบัติการ Android ต้องใช้ภาษาการเขียนโปรแกรมของระบบ เช่น C และ C++ ภาษาเหล่านี้ช่วยให้นักพัฒนาสามารถควบคุมและคาดการณ์ได้ ซึ่งเป็นสิ่งสำคัญเมื่อเข้าถึงทรัพยากรระบบและฮาร์ดแวร์ระดับต่ำ
น่าเสียดายที่ C และ C++ ไม่สามารถรับประกันความปลอดภัยของหน่วยความจำได้ ทำให้มีแนวโน้มที่จะเกิดข้อบกพร่องและช่องโหว่ด้านความปลอดภัย นักพัฒนามีหน้าที่รับผิดชอบในการจัดการอายุการใช้งานหน่วยความจำในภาษาเหล่านี้ แต่ในโค้ดเบสที่ซับซ้อนและมัลติเธรด พูดง่ายกว่าทำ
C และ C++ รวมกันเป็นโค้ดหลายสิบล้านบรรทัดบนแพลตฟอร์ม Android จุดบกพร่องด้านความปลอดภัยของหน่วยความจำเหล่านี้กลายเป็นแหล่งที่มาของโค้ดที่ไม่ถูกต้องซึ่งแก้ไขได้ยากที่สุด ซึ่งคิดเป็นประมาณ 70% ของช่องโหว่ด้านความปลอดภัยที่มีความรุนแรงสูงของ Android การแก้ไขจุดบกพร่องเหล่านี้เพียงอย่างเดียวไม่เพียงพอที่จะจัดการกับปัญหา และแนวทางที่ดีกว่าคือการป้องกันตั้งแต่แรก
การขาดความปลอดภัยของหน่วยความจำทำให้นักพัฒนาต้องเรียกใช้กระบวนการ Android ภายในแซนด์บ็อกซ์ที่มีข้อจำกัดอย่างเข้มงวดและไม่มีสิทธิพิเศษ แต่แซนด์บ็อกซ์มีราคาแพงในด้านทรัพยากร สิ้นเปลืองค่าใช้จ่ายเพิ่มเติม และทำให้เกิดเวลาแฝง แซนด์บ็อกซ์ไม่ได้กำจัดช่องโหว่ของโค้ดทั้งหมด และมีประสิทธิภาพลดลงเนื่องจากมีข้อบกพร่องที่มีความหนาแน่นสูง ช่วยให้ผู้โจมตีสามารถเชื่อมโยงช่องโหว่หลายรายการได้
ข้อจำกัดอีกประการหนึ่ง แม้ว่าจะไม่ได้มีลักษณะเฉพาะสำหรับ C และ C++ แต่ใช้ได้กับปัญหาด้านความปลอดภัยของหน่วยความจำทั้งหมด ก็คือ สถานะที่ผิดพลาดจะต้องถูกทริกเกอร์ในโค้ดที่ควบคุมไว้จึงจะตรวจพบได้ ดังนั้นแม้ว่าโค้ดของคุณจะมีการทดสอบที่ยอดเยี่ยม แต่จุดบกพร่องที่แท้จริงก็อาจยังคงตรวจไม่พบ และเมื่อพบจุดบกพร่อง การแก้ไขข้อบกพร่องนั้นเป็นอีกงานหนึ่ง ซึ่งต้องใช้กระบวนการที่ยาวนานและมีค่าใช้จ่ายสูงซึ่งอาจไม่ได้นำไปสู่การแก้ไขที่ถูกต้องเสมอไป ดังนั้นการตรวจจับจุดบกพร่องจึงไม่น่าเชื่อถือ และการป้องกันจุดบกพร่องเป็นแนวทางที่ดีกว่าในการคำนึงถึงข้อจำกัดเหล่านี้
นี่คือจุดที่การเปลี่ยนไปใช้ภาษาที่ปลอดภัยสำหรับหน่วยความจำเช่น Rust เข้ามาในรูปภาพ
สนิมและคุณประโยชน์ของมัน
Rust ให้การรับประกันความปลอดภัยของหน่วยความจำโดยใช้การผสมผสานระหว่างการตรวจสอบเวลาคอมไพล์เพื่อบังคับใช้อายุการใช้งาน/ความเป็นเจ้าของอ็อบเจ็กต์ และการตรวจสอบรันไทม์เพื่อให้แน่ใจว่าการเข้าถึงหน่วยความจำนั้นถูกต้อง ความปลอดภัยนี้เกิดขึ้นได้ในขณะที่ให้ประสิทธิภาพที่เทียบเท่ากับ C และ C++ Rust ยังช่วยลดความจำเป็นในการใช้แซนด์บ็อกซ์ ทำให้นักพัฒนามีพื้นที่ว่างมากขึ้นในการแนะนำคุณสมบัติใหม่ๆ ที่ปลอดภัยและเบากว่าทรัพยากร
แม้ว่า Rust จะมีข้อดีอยู่แล้ว แต่ก็เป็นไปไม่ได้ที่จะเปลี่ยนระบบปฏิบัติการ Android ทั้งหมดเป็น Rust ในชั่วข้ามคืน และนั่นอาจไม่จำเป็นด้วยซ้ำ เนื่องจากข้อบกพร่องด้านหน่วยความจำของ Android ส่วนใหญ่เกิดขึ้นในโค้ดใหม่หรือโค้ดที่เพิ่งแก้ไข โดยประมาณ 50% มีอายุน้อยกว่าหนึ่งปี Google เชื่อว่าความพยายามในการใช้ภาษาที่ปลอดภัยต่อหน่วยความจำนั้นมุ่งเน้นไปที่การพัฒนาใหม่ๆ แทนที่จะเขียนโค้ด C และ C++ ที่สมบูรณ์
Rust ยังมุ่งเน้นไปที่การป้องกันจุดบกพร่องมากกว่าการพึ่งพาการตรวจจับจุดบกพร่องอย่างมาก ส่งผลให้โค้ดมีความถูกต้องดีขึ้น โดยมีคุณสมบัติที่สำคัญหลายประการ เช่น ความปลอดภัยของหน่วยความจำ การทำงานพร้อมกันของข้อมูล ระบบประเภทที่แสดงออกมากขึ้น และไม่เปลี่ยนรูป การอ้างอิงและตัวแปรตามค่าเริ่มต้น การจัดการจำนวนเต็มที่ปลอดภัยยิ่งขึ้น การจัดการข้อผิดพลาดที่ดีขึ้นในไลบรารีมาตรฐาน และอื่นๆ อีกมากมาย มากกว่า.
การเปลี่ยนไปใช้ Rust มีความหมายอย่างไรสำหรับ Android
Google กล่าวว่าได้เพิ่มการรองรับ Rust ให้กับ Android Open Source Project ในช่วง 18 เดือนที่ผ่านมา แต่การเพิ่มภาษาใหม่ให้กับแพลตฟอร์ม Android ถือเป็นภารกิจที่ยิ่งใหญ่ จำเป็นต้องรักษา toolchains และการขึ้นต่อกันบางอย่าง โครงสร้างพื้นฐานการทดสอบและเครื่องมือต้องได้รับการอัปเดต และนักพัฒนาจำเป็นต้องได้รับการฝึกอบรม
Google มีโปรเจ็กต์สำหรับผู้ใช้งานกลุ่มแรกๆ สองสามโปรเจ็กต์ที่จะแบ่งปันในอีกไม่กี่เดือนข้างหน้า แต่ถึงกระนั้น ก็มีความชัดเจนแล้วว่าการปรับขนาดการสนับสนุน Rust ให้กับ OS อื่นๆ นั้นเป็นโครงการที่ใช้เวลาหลายปี
จากสิ่งที่เราเห็น Google กำลังใช้ Rust อยู่แล้วในบางแห่ง Bluetooth Stack ใหม่ของ Android เขียนชื่อรหัสใหม่ว่า "กาเบลดอร์เช่" กำลังเขียนด้วยภาษา Rust งานเริ่มต้นบน Gabeldorsche ในช่วงเวลาของ Android 11 แต่ยังไม่ได้ใช้งาน ของแอนดรอยด์ ที่เก็บคีย์ 2.0 โมดูลเขียนด้วยภาษา Rust และส่วนพื้นที่ผู้ใช้ของ Binder ซึ่งเป็นไดรเวอร์ IPC ของ Android ก็เช่นกัน แม้ว่าจะไม่เกี่ยวข้องกับ Android บานเย็นใหม่แล้ว เน็ตสแต็ค กำลังเขียนด้วยภาษาสนิมด้วย
สำหรับนักพัฒนาแอป สวิตช์จะไม่เปลี่ยนแปลงวิธีการเขียนแอปหรือวิธีการทำงานของ Framework API ของคุณในฐานะนักพัฒนาแอป สวิตช์นี้ส่งผลต่อวิธีการเขียนระบบปฏิบัติการเท่านั้น ตามที่สมาชิกของทีมนักพัฒนาสัมพันธ์ AndroidGoogle ยังไม่มีแผนที่จะเผยแพร่ Rust NDK ในขณะนี้ ภาษาที่รองรับสำหรับการพัฒนาแอปจะยังคงเป็น Kotlin, Java, C และ C++