- libghostty กำลังถูกพัฒนาให้เป็น ไลบรารีเทอร์มินัลอีมูเลเตอร์แบบฝังตัว ที่สามารถใช้งานได้ในทุกแอปพลิเคชัน
- องค์ประกอบแรกอย่าง libghostty-vt เป็น API แบบ ไร้การพึ่งพาใด ๆ ที่ปรับแต่งมาเพื่อการพาร์สและการคงสถานะ
- เกิดขึ้นมาเพื่อแก้ปัญหาความซับซ้อนของ การจำลองเทอร์มินัล และปัญหาการต้องเขียนซ้ำ โดยมุ่งสู่การรองรับข้ามแพลตฟอร์มและการพกพาที่สูง
- ในอนาคตมีแผนขยายไลบรารีเพิ่มเติม เช่น การจัดการอินพุตคีย์บอร์ด, การเรนเดอร์ด้วย GPU, การเชื่อมต่อกับเฟรมเวิร์กหลากหลายแบบ
- ตอนนี้ Zig API สามารถทดสอบได้แล้ว และ C API ก็มีแผนจะเปิดเผยในเร็ว ๆ นี้ พร้อมเปิดรับฟังความคิดเห็นจากผู้ใช้อย่างจริงจัง
บทนำและที่มาของการพัฒนา libghostty
- libghostty เป็น โครงการไลบรารี ที่ออกแบบมาเพื่อให้ทุกแอปพลิเคชันสามารถฝังความสามารถของเทอร์มินัลอีมูเลเตอร์สมัยใหม่ที่รวดเร็วและสมบูรณ์ได้
- ปัจจุบันมีโปรแกรมจำนวนมากที่ต้องลงมือสร้างเทอร์มินัลอีมูเลเตอร์ในแบบของตนเอง หรือแยกทำเฉพาะความสามารถด้านเทอร์มินัลในรูปแบบที่จำกัดมาก
- ชุดการติดตั้งการจำลองเทอร์มินัล ที่ถูกพัฒนาแยกกันเหล่านี้ มักเป็นโค้ดแบบ ad-hoc ใช้ครั้งเดียวจำนวนมาก และรับมือกับกรณียกเว้นกับความซับซ้อนได้ไม่เพียงพอ จึงมักเจอปัญหา ความไม่สมบูรณ์, บั๊ก, ประสิทธิภาพตก
- สำหรับนักพัฒนาส่วนใหญ่ การติดตั้งการจำลองเทอร์มินัลไม่ใช่ธุรกิจหลัก จึงมีความต้องการ โซลูชันกลางที่ใช้ซ้ำได้สูง
- libghostty มอบ C API แบบข้ามแพลตฟอร์ม ที่ออกแบบด้วยการพึ่งพาให้น้อยที่สุด ทำให้แอปพลิเคชันหลากหลายสามารถใช้ความสามารถด้านการจำลองเทอร์มินัลที่เสถียรและรวดเร็วได้
libghostty-vt: จุดเริ่มต้นของไลบรารีตัวแรก
libghostty-vt เป็นไลบรารีที่ ไม่พึ่งพาอะไรเลยแม้แต่ libc และมี API สำหรับการพาร์สลำดับคำสั่งของเทอร์มินัล รวมถึงการคงสถานะของเทอร์มินัล เช่น ตำแหน่งเคอร์เซอร์ สไตล์ และการขึ้นบรรทัดใหม่
- การพาร์สลำดับคำสั่งของเทอร์มินัลนี้ไม่เพียงเป็นความสามารถหลักของเทอร์มินัลอีมูเลเตอร์เท่านั้น แต่ยังจำเป็นอย่างยิ่งสำหรับเว็บไซต์ที่ต้องแสดงผลแบบมีสไตล์อย่างง่ายด้วย เช่น GitHub Actions, Vercel build logs เป็นต้น
- การพาร์สโปรโตคอลเทอร์มินัลอาจดูเรียบง่ายบนผิวเผิน แต่ความยากในการติดตั้งจริงสูงมาก และมีกรณีที่ implementation หลายตัว เช่น Jediterm แสดงปัญหาในการจัดการบางลำดับคำสั่ง
- นักพัฒนาบางคนอาจหยุดอยู่แค่การพาร์ส ANSI sequence แบบง่าย ๆ แต่ด้วยความต้องการด้านการจัดการสไตล์ที่ซับซ้อน เช่น รูปแบบการเขียน RGB หลายแบบ และความต้องการความเข้ากันได้อย่างสมบูรณ์ จึงจำเป็นต้องมี พาร์เซอร์ที่ประณีต
- libghostty-vt ถูกแยกออกมาจากแกนหลักที่ผ่านการพิสูจน์แล้วของ Ghostty และมีคุณสมบัติอย่าง การพาร์สที่ปรับแต่งด้วย SIMD, การรองรับ Unicode ที่ยอดเยี่ยม, โครงสร้างหน่วยความจำที่ล้ำหน้า, ความเข้ากันได้กับโปรโตคอลอย่างกว้างขวาง (Kitty Graphics, Tmux Control Mode เป็นต้น)
- มีให้ใช้งานเป็น C API แบบไร้การพึ่งพาในไฟล์เดียว ทำให้ฝังลงในทุกภาษาทั่วไปและทุกสภาพแวดล้อมได้ง่าย โดยเริ่มรองรับ macOS, Linux(x86_64, aarch64) ก่อน และมีแผนค่อย ๆ ขยายไปยัง Windows, อุปกรณ์ฝังตัว, WASM เป็นต้น
- รองรับเป้าหมายได้ครอบคลุมกว่า Ghostty GUI
libghostty ที่จะขยายต่อในระยะยาว
- หลังจาก libghostty-vt แล้ว จะมีไลบรารีชุดต่อไปตามมาเพื่อมอบความสามารถเพิ่มเติม เช่น การจัดการอินพุต (การเข้ารหัสคีย์บอร์ด เป็นต้น), การเรนเดอร์ด้วย GPU(OpenGL, Metal), GTK widget และ Swift framework
- การขยายความสามารถเหล่านี้จะถูกจัดเป็นโมดูล เพื่อทำให้การพึ่งพา ขนาดโค้ด และความซับซ้อนในการบำรุงรักษาต่ำที่สุด
สถานะการพัฒนา libghostty-vt
- PR (pull request) ที่เปิดเผย
libghostty-vt ภายนอกในรูปแบบโมดูล Zig เพิ่งถูก merge ไม่นานนี้ และนักพัฒนา Zig สามารถใช้งานได้ทันที
- C API อยู่ระหว่างการนิยาม และจะเปิดให้ทดสอบในเร็ว ๆ นี้ (ตรรกะแกนหลักเป็นซอร์สที่ผ่านการใช้งานจริงใน Ghostty มานานหลายปีแล้ว)
- ในแอป Ghostty บน macOS ก็ใช้ C API ภายในเช่นกัน แต่ header ภายในปัจจุบันไม่เหมาะกับการเปิดเผยภายนอกและการใช้งานทั่วไป จึงกำลังออกแบบ C API ชุดใหม่ทั้งหมด
- libghostty มี การจัดการเวอร์ชัน แยกจากแอปพลิเคชัน Ghostty และตอนนี้อยู่ในช่วงอัลฟา โดยคาดหวังการนำไปใช้ตั้งแต่เนิ่น ๆ และ การมีส่วนร่วมจากนักพัฒนา language binding
- ตั้งเป้าเปิดตัวรีลีสแรกที่มี tag ภายใน 6 เดือน
คำขอความคิดเห็นจากผู้ใช้
- ตอนนี้ยังอยู่ใน ขั้นตอนออกแบบ API ดังนั้นความเห็นและฟีดแบ็กจากผู้ใช้จริงจึงสำคัญมาก
- นอกจาก Ghostty แล้ว ยังมีสมาชิกจากชุมชนหลากหลายกลุ่มที่กำลังพัฒนาโครงการบนพื้นฐานของ libghostty และหวังว่าจะมีผู้ใช้เข้ามามีส่วนร่วมเพิ่มขึ้นอีก
- หากมีไอเดียการใช้งานโครงการหรือความต้องการต่าง ๆ สามารถสื่อสารกับนักพัฒนาได้โดยตรงผ่าน Ghostty Discord หรืออีเมล
- ปัจจุบัน libghostty ยังเป็นเวอร์ชันอัลฟา API จึงยังไม่เสถียร แต่ ตรรกะแกนหลักมีเสถียรภาพสูงที่ผ่านการพิสูจน์ในการใช้งานจริง
แนวโน้มและผลกระทบในอนาคต
- ด้วยการที่แอปพลิเคชัน Ghostty บรรลุเสถียรภาพ แล้ว ตอนนี้จึงสามารถเดินหน้าไปสู่เป้าหมายที่ใหญ่กว่าคือ libghostty ได้
- หาก libghostty ถูกใช้อย่างแพร่หลายในแอปพลิเคชันหลากหลายประเภท ก็อาจสร้าง อิทธิพลและแรงกระเพื่อมต่อระบบนิเวศ ได้มากกว่า Ghostty ในฐานะแอปเดี่ยว
- เมื่อการใช้งาน libghostty เพิ่มขึ้น ตัว Ghostty เองก็จะยิ่งได้ความสามารถที่หลากหลายและเสถียรภาพที่สูงขึ้น
- Ghostty และ libghostty จะเติบโตไปในลักษณะที่เสริมกันและกัน และคาดว่าจะเป็นประโยชน์ต่อทั้งนักพัฒนาและผู้ใช้
3 ความคิดเห็น
ผมใช้มาตั้งแต่ 1.0 แล้ว นอกจากไม่มีการเลื่อนหน้าจอและการค้นหา ก็พอใจมากครับ 555 เดิมใช้ iTerm อยู่ แต่ตอนนี้ปักหลักกับตัวนี้แล้วครับ
libghostty กำลังมา
Ghostty 1.0 เปิดตัวแล้ว - เทอร์มินัลอีมูเลเตอร์ความเร็วสูงข้ามแพลตฟอร์ม
ความคิดเห็นบน Hacker News
คนนี้นี่ระดับตำนานจริง ๆ ต่อให้ผ่านทั้งการก่อตั้งบริษัท เข้าตลาดหุ้น และขายกิจการมูลค่าหลายพันล้านมาแล้ว ก็ยังกลับมาสู่โลกของการเขียนโค้ดอีกครั้ง
ผมคิดว่า Hashimoto ไม่ได้แค่เป็นอัจฉริยะ แต่สิ่งที่น่าทึ่งที่สุดคือความสามารถด้าน abstraction ที่ไม่ธรรมดาในการทำให้ระบบและอินเทอร์เฟซแยกเป็นโมดูลอย่างถึงที่สุดและลดการพัวพันกันให้น้อยที่สุด รู้สึกเหมือนเป็นคนที่นำปรัชญา Simple Made Easy ของ Rich Hickey มาปฏิบัติจริง ซอฟต์แวร์ของเขาให้ความรู้สึกเหมือนถูกออกแบบมาในแบบที่มันแทบจะต้องทำงานได้อย่างถูกต้องอยู่แล้ว และพอได้ลองใช้ Ghostty ครั้งแรก ปกติเวลาใช้ iTerm2 กับธีม Zsh/Powerlevel10k จะมีอาการดีเลย์ตอนเรนเดอร์นิด ๆ อยู่เสมอ แต่ใน ghostty ตอบสนองแทบจะทันที
ทั้งอิจฉาและรู้สึกเหมือนชีวิตในฝันเหมือนกัน พอมีทรัพย์สินแล้วก็ยังสร้างสรรค์งานต่อไปเพื่อโปรเจกต์ล้วน ๆ อยู่ในจุดที่ไม่ต้องยอมลดคุณภาพเพราะเรื่องเงิน ทำให้นึกถึงคำคมเก่าของ Knuth
แน่นอนว่าโปรเจกต์ที่ทำด้วยความรักกำลังประสบความสำเร็จมากขึ้นเรื่อย ๆ มันแสดงให้เห็นว่าถ้าไม่หมกมุ่นกับเงินก็อาจสร้างผลลัพธ์ที่ดีกว่าได้ ในอีกมุมหนึ่งมันก็ทำให้ย้อนคิดถึงโครงสร้างสังคมและเศรษฐกิจโดยรวม ว่าการจะใช้ชีวิตแบบนี้ได้ก็ต้องมีทุนตั้งต้นระดับหนึ่ง อย่างที่ Knuth ว่าไว้ ถ้าเราได้เวลาเพิ่มอีกหน่อย ทุกคนก็น่าจะสร้างผลลัพธ์ที่ดีขึ้นได้ แต่พอทุกอย่างต้องรีบ เราก็มักต้องเสียสละหลายอย่าง และอย่างอีกคำคมหนึ่งของเขา
พอมาถึงตรงนี้ก็เลยต้องถามว่า เรากำลังตอบแทนคนที่แก้ปัญหาได้เก่งและทำให้ชีวิตง่ายขึ้นอย่างเหมาะสมจริงหรือเปล่า หรือแค่กำลังเพิ่มคะแนนในเกมที่ไร้ความหมาย แล้วสังคมแบบไหนกันที่จะสร้างตำนานได้มากขึ้น? จะทำอย่างไรให้เกิดสังคมที่คนอย่าง Mitchell ใช้ชีวิตตามแพสชันได้ โดยไม่ต้องแบกรับภาระในการอธิบายคุณค่าของคุณภาพให้บอร์ดบริหารฟัง
เคยเจอตัวจริงมาแล้ว เป็นคนอบอุ่นและนิสัยดีมาก ตอนก่อนก่อตั้ง Hashicorp เขาอยู่ที่ Kiip แล้วเราได้กินมื้อเที่ยงด้วยกันในงานคอนเฟอเรนซ์ Mitchell เป็นแฮกเกอร์ตัวจริง รู้สึกได้เลยว่าเขารักทุกอย่างเกี่ยวกับคอมพิวติ้งจากใจจริง โดยเฉพาะในงานคอนเฟอเรนซ์ด้าน distributed systems เขาจะอินมาก ทำอะไรก็น่าจะสำเร็จแน่ ๆ พอได้เจอ Ghostty และเริ่มใช้ ก็พอใจมากและใช้ต่อเนื่องมาตลอด
แล้วคนนี้ก็ยังทุ่มเทกับการพัฒนาซอฟต์แวร์ tty อีกด้วย ซึ่งเป็นหนึ่งในมุมที่เนิร์ดจัดมากของ Unix technology stack
ผมใช้ ghostty ทุกวันอยู่แล้ว แต่เพิ่งรู้ตอนนี้เองว่าคนสร้างคือ Mitchell Hashimoto เป็นประสบการณ์ที่เจ๋งมากจริง ๆ
Ghostty เจ๋งมาก น่าตื่นเต้นที่ terminal emulator แบบ omni-platform ตัวจริงอาจขยายไปถึงมือถือได้ด้วย ที่ Ghostty เขียนด้วย Zig ก็ทำให้ทึ่งเหมือนกัน นี่เป็นโปรแกรมแรกที่ผมใช้ซึ่งสร้างด้วย Zig และโครงสร้างรีโพก็ดูเหมือนสไตล์ Golang เป๊ะเลย เลยรู้สึกสนุกดี https://github.com/ghostty-org/ghostty
ผมอยากชอบ Ghostty มากจริง ๆ แต่ยังมีจุดที่เสียดายอยู่
font-thicken-strengthแล้ว แต่ก็ยังไม่เหมือน 100% ดูเหมือนว่าจะเป็นไปไม่ได้หรือยากมากเพราะลักษณะของการเรนเดอร์ด้วย Metal สำหรับคนที่จ้องแต่ข้อความทั้งวัน นี่เป็นเรื่องสำคัญมากความหลงใหลและความละเอียดที่ Mitchell ใส่ให้กับ developer experience นั้นน่าทึ่งมาก ผมยังจำความประทับใจตอนใช้ Vagrant ครั้งแรกที่ซานตาโมนิกาในปี 2011 ได้ชัดเจน เดิมทีไม่เคยคิดจะเปลี่ยนจาก iTerm2 เลย แต่พอได้ลอง Ghostty ก็ตกหลุมรักทันที
ช่วงนี้ผมใช้ ghostty ทุกวัน เพิ่งย้ายมาใช้ไม่นาน บน macOS พอแมป caps lock เป็น cmd แล้ว cmd+c ก็ใช้งานได้ดี การตั้งค่าพื้นฐานฉลาดและดีมาก โดยรวมพอใจหมด ยกเว้นเรื่องที่ปรับแต่งไม่ค่อยง่าย ธีม Gruvbox light ก็ดูดีมากด้วย การที่เขียนด้วย Zig ก็เท่มาก ถ้าใครสงสัยว่า Zig พร้อมสำหรับงานใช้งานจริงหรือยัง ghostty ก็น่าจะเป็นคำตอบนั้น ผมคงไม่กลับไปใช้ terminal ตัวอื่นอีกแล้ว เป็นประสบการณ์ที่น่าพอใจมากจริง ๆ เพิ่มเติม: ถ้าเอา ghostty ไปใช้คู่กับ aerospace ก็แทบจะได้สภาพแวดล้อมบนแม็คที่เกือบสมบูรณ์แบบสำหรับการใช้คีย์บอร์ดล้วน
ตอนนี้ผมใช้ ghostty บน AirMac เครื่องเก่าที่พี่ส่งต่อมาให้ตอนเลิกเขียนโค้ดแล้ว ขอบคุณจากใจจริงที่ทำ ghostty ขึ้นมา ถึงจะเป็นเรื่องเล็ก แต่การไม่มี dependency กับ libc กลับรู้สึกมีคุณค่ามากอย่างประหลาด
ฮิสโตแกรมวิเคราะห์ความถี่ของ visidata เรนเดอร์ออกมาไม่ถูกต้อง บางส่วนแสดงเป็นสี่เหลี่ยมได้ แต่ที่เหลือขึ้นเป็นเครื่องหมายคำถามในรูปเพชร ปัญหานี้ทำให้ผมยังย้ายออกจาก iTerm ไม่ได้ ผมไม่รู้ด้วยซ้ำว่าควรค้นหาด้วยคีย์เวิร์ดอะไร เลยยิ่งแก้ยาก
ผมกำลังจับตาดู Ghostty ต่อไปด้วยความหวังว่า text reflow ของมัน (โดยเฉพาะเมื่อรวม scrollback) จะช่วยแก้ปัญหาใน terminal ที่อิง Neovim ได้ด้วย ดีใจมากที่ Ghostty กำลังนำพานวัตกรรมใหม่เข้ามาสู่สภาพแวดล้อมเทอร์มินัล https://github.com/neovim/neovim/issues/33155
ผมอยากใช้ ghostty มากจริง ๆ แต่เพราะยังไม่มี cmd+f เลยยังไม่ได้ลอง ถึงอย่างนั้นก็ยังตื่นเต้นกับพัฒนาการของโปรเจกต์นี้มาก
https://ghostty.org/docs/install/release-notes/1-2-0#roadmap
https://github.com/ghostty-org/ghostty/issues/189