Tags:
Node Thumbnail

ช่วงหลายปีที่ผ่านมา เราเห็น Rust ถูกนำไปใช้เขียนซอฟต์แวร์พื้นฐานสำคัญๆ หลายตัวที่เดิมสร้างด้วย C/C++ ด้วยเหตุผลด้านความปลอดภัยที่ระดับตัวภาษา Rust เอง ตัวอย่างโครงการลักษณะนี้คือ su/sudo ตัวใหม่ที่เขียนด้วย Rust, Rustls โครงการทดแทน OpenSSL, mod_tls ของ Apache เป็นต้น

ในโลกของลินุกซ์ยังมีซอฟต์แวร์พื้นฐานที่เรียกรวมๆ ว่า coreutils (ย่อมาจาก Core Utilities) ตัวอย่างที่ใช้บ่อยๆ คือคำสั่งอย่าง ls, ln, more, chmod, chown, cat, printenv, wc เป็นต้น ซอฟต์แวร์เหล่านี้ถูกสร้างโดยโครงการ GNU มายาวนานตั้งแต่ยุค 90s และพัฒนาด้วยภาษา C

นับตั้งแต่ปี 2021 เป็นต้นมา มีโครงการชื่อ uutils ตั้งเป้าเขียนซฮฟต์แวร์ในชุด coreutils กับซอฟต์แวร์ชุดใกล้เคียงคือ findutils (find, locate) และ diffutils ขึ้นมาใหม่ด้วยภาษา Rust โดยได้รับสปอนเซอร์บางส่วนจากกองทุน Sovereign Tech Fund ของเยอรมนี เป้าหมายของโครงการคือทดแทนซอฟต์แวร์เดิมแบบเข้ากันได้ 100% ผู้ใช้พิมพ์คำสั่งแบบเดิม ได้ผลเหมือนเดิม ไม่ต้องสนใจว่าเบื้องหลังเปลี่ยนไปอย่างไร

ตอนนี้โครงการคืบหน้าไปพอสมควร เวอร์ชันล่าสุด 0.0.25 ผ่านชุดทดสอบความเข้ากันได้กับ GNU coreutils ของเดิมแล้ว 72.35% ดูจากกราฟความคืบหน้าแล้วก็น่าจะเสร็จสมบูรณ์ ทดแทน coreutils ของเดิมได้ในเวลาอีกไม่กี่ปีข้างหน้า

ที่มา - uutils via Phoronix

No Description

No Description

Get latest news from Blognone

Comments

By: veer
Windows PhoneUbuntu
on 25 March 2024 - 13:40 #1308671
veer's picture

ดีใจที่มีการพัฒนาใหม่ด้วยภาษา Rust แต่การเปลี่ยนจากซอฟต์แวร์ลิขสิทธิ์แบบ GPL ไปเป็นแบบ MIT/X11 เป็นเรื่องที่น่ากังวล ต่างจาก GPL ตรงที่สัญญาอนุญาตแบบ MIT/X11 ไม่มีการคุ้มครองใด ๆ จากคดีความละเมิดสิทธิบัตร และไม่กระตุ้นให้บริษัทต่างๆ นำเอาการปรับแต่งของพวกเขาปล่อยกลับคืนสู่สาธารณะ

By: langisser
In Love
on 25 March 2024 - 13:54 #1308672

อนาคตเราจะมี basic command 2 ตัวที่มันทับซ้อนกันหรือว่าสุดท้ายแล้วในโลกของลินุกซ์จะมาใช้ตัว Rush กันหมดนะ

By: tontan
ContributorAndroidSymbianUbuntu
on 25 March 2024 - 15:53 #1308685 Reply to:1308672
tontan's picture

ถ้าย้ายมาใช้ Rush กันหมด GNU/Linux ก็จะเหลือแค่ Linux แน่ ๆ ครับ


บล็อก: wannaphong.com และ Python 3

By: mr_tawan
ContributoriPhoneAndroidWindows
on 26 March 2024 - 00:55 #1308715
mr_tawan's picture

บางทีผมก็รู้สึกนะว่าทำไมเค้าชอบประดิษฐ์ล้อใหม่กันจัง?

ข้างบนล้อเล่น แต่ที่สงสัยจริง ๆ คือ มันเขียนโค๊ดให้ปลอดภัยด้วยภาษาอื่นไม่ได้จริง ๆ เหรอ?


  • 9tawan.net บล็อกส่วนตัวฮับ
By: veer
Windows PhoneUbuntu
on 26 March 2024 - 06:16 #1308717 Reply to:1308715
veer's picture

บางทีผมก็รู้สึกนะว่าทำไมเค้าชอบประดิษฐ์ล้อใหม่กันจัง?

หลังจากใช้ fish ripgrep fd อยู่สักพัก ผมเริ่มเข้าใจแล้ว ว่าทำไมต้อง compatible กับของเก่า

มันเขียนโค๊ดให้ปลอดภัยด้วยภาษาอื่นไม่ได้จริง ๆ เหรอ?

ได้ โดยเฉพาะอย่างยิ่ง coreutils ที่ทำงาน thread เดียว
หรือถ้าจะป้องกันคนเขียนหลาย thread แล้วแย่งกันเขียนข้อมูลก็ใช้ Erlang ก็ได้ครับ

By: rattananen
AndroidWindows
on 26 March 2024 - 09:00 #1308722 Reply to:1308715

ผมมองว่ามันเป็นค่านิยมน่ะครับ
ที่คิดว่าการ implement ที่ low-level มัน unsafe ไปเสียทั้งหมด
ผมเคยเจอ programmer ที่ไม่กล้าแม้แต่จะเขียน sql ตรงๆ จะใช้แต่ abstract API (พวก object model) ลูกเดียว (แม้ว่า API มันแย่แค่ไหนก็ตาม) เขามองว่าการเขียน sql เองไม่ปลอดภัย

By: veer
Windows PhoneUbuntu
on 26 March 2024 - 11:02 #1308730 Reply to:1308722
veer's picture

Rust ก็ไม่ได้ high level ขนาดนั้นและไม่ได้ map ระหว่าง model ครับ uutils ก็เรียก syscall เช่น kill wait เหมือนเดิมนี่ล่ะ เพียงแต่ว่า compiler ช่วยกันไม่ให้ลืม free หรือ free ซ้ำ หรือแย่งกันเขียน memory จาก thread คนละตัว ซึ่งแต่ละอย่างที่ว่ามาก็เป็นปัญหาที่พบบ่อย ๆ

By: rattananen
AndroidWindows
on 26 March 2024 - 11:34 #1308732 Reply to:1308730

ผมหมายถึง low level API อย่าง pointer
หรือ mechanism ทั่วไป อย่างเขียน semaphore/mutex เองน่ะครับ

ผมว่าถ้าเราเข้าใจของพวกนี้ไม่ว่าจะภาษาไหนเราก็ทำให้มัน safe ได้ล่ะครับ

By: veer
Windows PhoneUbuntu
on 26 March 2024 - 13:46 #1308743 Reply to:1308732
veer's picture

ผมหมายถึง low level API อย่าง pointer หรือ mechanism ทั่วไป อย่างเขียน semaphore/mutex เองน่ะครับ

Rust ใช้ pointer ได้และ uutils ก็ใช้ด้วย นอกจากนั้นก็ใช้ mutex lock ด้วยครับ

ผมว่าถ้าเราเข้าใจของพวกนี้ไม่ว่าจะภาษาไหนเราก็ทำให้มัน safe ได้ล่ะครับ

ต่อให้เข้าใจก็พลาดได้ครับ และทางปฏิบัติคนพลาดก็เยอะด้วย เฉพาะกรณี buffer overflow ของ Chrome อย่างเดียวก็มากแล้ว

By: hisoft
ContributorWindows PhoneWindows
on 26 March 2024 - 16:50 #1308750 Reply to:1308732
hisoft's picture

ผมว่าถ้าเราเข้าใจของพวกนี้ไม่ว่าจะภาษาไหนเราก็ทำให้มัน safe ได้ล่ะครับ

ปัญหาคือเรามีโค้ดที่มีช่องโหว่หลุดออกมาทั่วไปนะครับ 🥲

By: rattananen
AndroidWindows
on 26 March 2024 - 17:03 #1308751 Reply to:1308750

คือผมมองว่า code ที่เราเขียนจะ safe หรือไม่นั้น
มันอยู่ที่คนเขียนสัก 60% ภาษา 40% น่ะครับ (ไม่ว่าจะเป็นภาษาไหนก็ตาม)

ขนาดภาษาที่น่าจะ safe กว่า Rust อย่าง Go ผมยังเคยเห็น segmentation fault เลย

By: veer
Windows PhoneUbuntu
on 27 March 2024 - 07:55 #1308778 Reply to:1308751
veer's picture

ขนาดภาษาที่น่าจะ safe กว่า Rust อย่าง Go ผมยังเคยเห็น segmentation fault เลย

ผมเห็นด้วยว่าเขียน Rust ไม่ได้ป้องกันช่องโหว่ได้ 100% และ Go ก็มีแง่มุมดี ๆ เช่น บังคับให้ใส่ขนาดของ channel เสมอ ทำให้ channel ไม่ขยายไปเรื่อย ๆ จนหน่วยความจำเต็ม

แต่ compiler ของ Go ไม่ได้ตรวจสอบกรณีที่ thread หลายตัว ๆ ซึ่งอาจจะเรียกว่า goroutine ก็ตาม เขียนหน่วยความจำที่เดียวกันโดยที่ไม่ได้ lock เฉพาะประเด็นนี้ประเด็นเดียวก็ทำให้ Go ไม่ได้ safe กว่า Rust แล้วครับ

By: rattananen
AndroidWindows
on 27 March 2024 - 10:43 #1308791 Reply to:1308778

segmentation fault ส่วนใหญ่เกิดจากการใช้ pointer ผิดวิธีครับ
แต่ Go มี garbage collector เลยไม่ต้อง handle pointer เอง
พอไม่ต้อง handle pointer เองผมเลยคิดว่ามันควร safe กว่า Rust ไงครับ

By: veer
Windows PhoneUbuntu
on 27 March 2024 - 11:48 #1308798 Reply to:1308791
veer's picture

จริงครับ แต่ Rust ก็มี RAII ช่วยจัดการด้วย เฉพาะในกรณีที่เป็นถึงจะใช้ pointer แบบ unsafe ซึ่งก็จะคล้าย ๆ ใช้ cgo

By: hisoft
ContributorWindows PhoneWindows
on 27 March 2024 - 10:39 #1308790 Reply to:1308751
hisoft's picture

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

By: btoy
ContributorAndroidWindows
on 26 March 2024 - 13:19 #1308740
btoy's picture

Rust น่าจะค่อยๆแทรกซึมเข้าไปในจุดที่ตัวภาษาทำหน้าที่ได้ดี แต่ Rust เองก็คงอยู่ในจุดที่ถูกหยิบไปใช้กับงานที่เหมาะสมเหมือนกับภาษาอื่นๆ และไม่น่าโตได้กว้างเท่า C++ ด้วยลักษณะของตัวภาษาเอง


..: เรื่อยไป

By: veer
Windows PhoneUbuntu
on 26 March 2024 - 16:29 #1308748 Reply to:1308740
veer's picture

C++ ยังนำอยู่มากทั้ง code เก่าและโปรแกรมเมอร์ที่มีประสบการณ์ แต่ว่า Rust ก็มีหลายอย่างออกมาให้ลุ้นคล้าย ๆ uutils นี่ล่ะครับ เช่น Servo ที่เป็น web browser และ Bevy ที่เป็น game engine ถึงดูห่างจากตัวเก่าที่ใช้ C++ เขียนอยู่มาก็ตาม

By: btoy
ContributorAndroidWindows
on 27 March 2024 - 12:46 #1308803 Reply to:1308748
btoy's picture

ผมชอบอ่าน comments ของคุณ veer มากเลย ได้ความรู้ใหม่ๆตลอด เขียนแบบนี้ต่อไปเรื่อยๆนะครับ

จะว่าไป Rust นี่ผมตั้งใจจะศึกษาพื้นฐานให้จบภายในปีที่แล้ว แต่ยังไปไม่ถึงไหนเลย งานประจำก็ยุ่งเกิ๊นนน ไม่มีเวลา หมดแรงไปทำอย่างอื่น เฮ้อ


..: เรื่อยไป