เบื่อแล้ว ก็เลยกำลังเขียนเบราว์เซอร์เอง
(adayinthelifeof.nl)- ประสบการณ์ส่วนตัวในการหลีกเลี่ยงข่าวนำไปสู่ข่าวเทคโนโลยี และเมื่อรู้สึกไร้พลังต่อ การเปลี่ยนแปลงเชิงลบ ที่เกิดซ้ำ ๆ จึงตัดสินใจสร้างเบราว์เซอร์เอง
- บน Hacker News ต้องพบกับกระแสอย่างการอัปเดตที่ไม่ต้องการ การขึ้นค่าสมัครสมาชิก การเก็บข้อมูลส่วนบุคคล การถกเถียงเรื่องการห้ามการเข้ารหัส และการควบคุมระบบนิเวศของเบราว์เซอร์อยู่เรื่อย ๆ
- ครั้งนี้แทนที่จะหลีกเลี่ยงอย่างเดียว ในฐานะโปรแกรมเมอร์จึงลองตอบโต้เล็ก ๆ ด้วยการ สร้างและเปิดเผยโค้ด
- มองว่าโครงการมีโอกาสต่ำที่จะเสร็จสมบูรณ์หรือกลายเป็นเบราว์เซอร์กระแสหลัก และยอมรับว่าหากไม่ได้รับความช่วยเหลือก็อาจหยุดลงในไม่ช้า
- คาดหวังว่าโครงการเบราว์เซอร์ที่ไม่ใช่เชิงพาณิชย์และเปิดเผยนี้จะสร้างแรงบันดาลใจให้คนอื่น และนำไปสู่โครงการทางเลือกที่มากขึ้น
กระบวนการที่การหลีกเลี่ยงข่าวนำไปสู่การพัฒนาเบราว์เซอร์
- ประมาณ 10 ปีก่อน ขณะขับรถไปมาหาลูกค้าบ่อย ๆ เคยฟัง Business News Radio(BNR) หรือ Radio 1 ของเนเธอร์แลนด์ แต่วันหนึ่งหลังจากปิดวิทยุแล้วก็ไม่อยากกลับไปฟังข่าวอีก
- รู้สึกว่าข่าวมีแต่การเล่า เรื่องแย่ ๆ อย่างสงครามและคอร์รัปชันซ้ำ ๆ และมองว่าในฐานะปัจเจกบุคคลไม่มีวิธีแก้ปัญหาเหล่านั้นได้
- หลังจากนั้นก็หลีกเลี่ยงการฟังข่าว ดูข่าว และไล่ดูข่าวบนอินเทอร์เน็ต หากข่าว 2 ทุ่มเริ่มขึ้นก็จะเปลี่ยนช่องหรือออกจากห้องที่มีข่าว
- มองว่าข่าวสำคัญก็จะได้ยินผ่านผู้คนอยู่ดี และแทนที่จะติดตามข่าวทั่วไป ก็รับข่าวอย่างจำกัดเฉพาะบาง subreddit ใน Reddit และข่าวเทคโนโลยีเท่านั้น
ความรู้สึกไร้พลังที่เกิดซ้ำแม้ในข่าวเทคโนโลยี
- รับข่าวเทคโนโลยีประมาณ 98% ผ่าน Hacker News ของ Y Combinator แต่เมื่อเวลาผ่านไป ความรู้สึกแบบที่เคยเกิดกับข่าวทั่วไปเมื่อ 10 ปีก่อนก็เพิ่มขึ้นอีกครั้ง
- ปัญหาที่พบซ้ำ ๆ ได้แก่ การอัปเดตที่ไม่ต้องการ การผิดสัญญา การขึ้นค่าสมัครสมาชิก การถูกบริษัทซื้อกิจการ และความพยายามเก็บข้อมูลส่วนบุคคลมากขึ้น
- ยังมองว่ากระแสที่รัฐบาลพยายามห้ามการเข้ารหัสโดยอ้างเหตุผลเรื่องผู้กระทำความผิดทางเพศต่อเด็ก ก็เป็นส่วนหนึ่งของปัญหาเดียวกัน
- เบราว์เซอร์เป็นเป้าหมายที่สำคัญเป็นพิเศษ เพราะเป็นพื้นที่ที่ผู้คนเกือบทั้งหมดทั่วโลกใช้เวลาอยู่
- หากตัวเบราว์เซอร์เองแสดงโฆษณา ad blocker ที่บล็อกโฆษณาบนเว็บไซต์อาจรับมือได้ยากขึ้น
- เคยมีกรณีที่ทำให้ใช้งานเว็บไซต์จากเบราว์เซอร์อื่นได้ยากด้วยส่วนขยายเฉพาะเบราว์เซอร์บางตัว และมองว่าหากมีวิธีหลีกเลี่ยงปัญหาการผูกขาดได้ เรื่องเช่นนี้ก็อาจเกิดซ้ำอีก
เหตุผลที่ตัดสินใจทำเองและความคาดหวังที่ต่ำ
- ครั้งนี้แทนที่จะเพียงหลีกเลี่ยง จึงตัดสินว่าในฐานะโปรแกรมเมอร์สามารถ พัฒนาเบราว์เซอร์เอง และแชร์โค้ดได้
- เหตุผลที่ตัดสินใจสร้างเบราว์เซอร์มีสองข้อ
- เป็นความพยายามที่จะผลักกลับ แม้จะเป็นวิธีเล็กมากก็ตาม
- เหตุผลส่วนตัวว่าเคยอยากลองสร้างเบราว์เซอร์เองมานานแล้ว
- ไม่ได้ตั้งความหวังกับโครงการนี้ไว้สูง
- ไม่คาดหวังว่าจะเสร็จสมบูรณ์
- มองว่าหากไม่มีคนช่วย ก็อาจตายไปในไม่ช้า
- ไม่คาดหวังว่าจะกลายเป็นเบราว์เซอร์ครองตลาดที่โค่นเบราว์เซอร์รายใหญ่เดิมได้
- สิ่งที่หวังคือให้เป็นโครงการที่เปิดกว้างด้วย วัตถุประสงค์ที่ไม่ใช่เชิงพาณิชย์ และอยู่ในสภาพที่คนอื่นสามารถได้รับแรงบันดาลใจแล้วสร้างโครงการของตนเองได้
- สามารถดูความคืบหน้าของโครงการได้ที่ บทความความคืบหน้าบน codemusings.nl
- ที่เก็บโค้ดของโครงการอยู่ที่ jaytaph/gosub-browser
1 ความคิดเห็น
ความคิดเห็นบน Hacker News
ผมคือ OP ขอบคุณสำหรับคอมเมนต์ทั้งเชิงบวก/เชิงลบ/เป็นกลาง และขอเสริมอีกสักหน่อยว่า จริงอยู่ที่มีโปรเจกต์เบราว์เซอร์ให้ร่วม contribute ได้อยู่แล้วมากมาย และการไปช่วยฝั่งนั้นน่าจะมีประสิทธิภาพกว่า แต่ถ้าทำแบบนั้น สุดท้ายก็จะเหลือเบราว์เซอร์อยู่แค่ไม่กี่ตัว ผมอยากให้มี เบราว์เซอร์จำนวนมาก เพื่อให้ผู้คนมีทางเลือก
นี่เป็น โปรเจกต์ส่วนตัว อย่างชัดเจน ถึงแม้จะไม่ได้เริ่มเพียงเพราะเบื่อหน่ายวงการเทคโนโลยี ผมก็คงเริ่มทำอยู่ดี แต่ผมโกรธกับความรู้สึกไร้อำนาจที่ว่าเปลี่ยนอะไรไม่ได้เลย และนี่คือวิธีที่ผมพยายามจะทำอะไรสักอย่าง ผมไม่ได้คาดหวังว่าจะทำเบราว์เซอร์จริง ๆ ให้เสร็จสมบูรณ์ แค่อยากให้คนได้ดูโค้ดของผมแล้วจะหัวเราะ หรือได้ไอเดียที่ดีกว่าไปก็ได้ ตัวอย่างเช่น ถ้ามีการอธิบายอัลกอริทึมของ HTML5 tokenizer และ parser แบบทีละขั้นเหมือนในไซต์ whatwg ใคร ๆ ก็จะเขียน HTML5 parser ของตัวเองได้ง่ายขึ้น ถ้า Google หรือ Microsoft ใช้อำนาจครองตลาดสร้าง HTML5 แบบ custom ที่เป็นรูปแบบปิด เช่น ghtml ขึ้นมา ใครจะหยุดได้? เหตุผลที่อยากเริ่มจากศูนย์คือผมอยากเข้าใจความยากเชิงเทคนิคในระดับรากฐานมากขึ้น
ผมเห็นด้วยกับสิ่งที่พูดถึงความน่าสังเวชของ “ข่าว” ในสงครามจิตวิทยา สิ่งนี้เรียกว่า การบ่อนทำลายขวัญกำลังใจ (sapping) ในอดีต ศัตรูใช้โฆษณาชวนเชื่อเพื่อทำลายเจตจำนงในการต่อต้านและทำให้ผู้คนหมดเรี่ยวแรง ตัวอย่างคลาสสิกคือ Lord Haw-Haw https://en.wikipedia.org/wiki/Lord_Haw-Haw
ทุกวันนี้ ช่องข่าวกระแสหลักและยักษ์ใหญ่ด้านเทคโนโลยีดูเหมือนพยายามผูกมัดผู้คนให้อยู่ในความสิ้นหวังและความวิตกกังวลอย่างถาวร วาทกรรมด้านเทคโนโลยีก็ดูเหมือนหลุมของความเย้ยหยัน การหลีกหนี การปฏิเสธ การยอมจำนน และความไร้อำนาจที่เรียนรู้มา ช่วงหลังผมทำสัมภาษณ์และวิเคราะห์อารมณ์มาเยอะ ผลลัพธ์น่ากลัวมาก รู้สึกว่าคำว่า “tech” เองกำลังกลายเป็นคำพ้องความหมายกับ “การต่อต้านนั้นไร้ประโยชน์” การทำอะไรสักอย่าง ไม่ใช่เพราะคาดหวังความสำเร็จ แต่เพื่อเป็นแบบอย่างและรักษาสติของตัวเองไว้ คือการตอบสนองที่เป็นบวกและเป็นมนุษย์ที่สุด
ถ้าพูดแบบ Linus Torvalds ก็คือ เมื่อทำด้วยท่าทีว่า “ไม่ได้ตั้งใจจะสร้างอะไรที่ใหญ่และเป็นมืออาชีพเหมือน GNU แต่ทำเพื่อตัวเอง” คุณจะทำอะไรได้มากด้วยความพยายามน้อยกว่ามาก เมื่อทำแบบนั้น คุณสามารถประนีประนอมเชิงปฏิบัติได้ และไม่ว่าจะเพื่อการเรียนรู้หรือเพื่อใช้งานจริง ก็สามารถไปถึงสิ่งที่มีประโยชน์กับตัวเองได้ด้วยแรงน้อยกว่าการสร้าง “ผลิตภัณฑ์” มาก โปรเจกต์ส่วนตัวของผมเองหลายครั้งก็เริ่มจากการเจอโปรเจกต์ส่วนตัวเล็ก ๆ แบบนี้ เอาบางส่วนมาใช้ซ้ำ แล้วค่อย ๆ ไปในทิศทางที่ต่างออกไปโดยสิ้นเชิง การหยิบโปรเจกต์เล็ก ๆ ที่ “ใกล้เคียงพอ” มาทำนั้นง่ายกว่าการย่อหรือปรับแต่งสัตว์ประหลาดขนาดใหญ่ที่มีฟีเจอร์ครบถ้วนมาก ความซับซ้อนของเบราว์เซอร์ส่วนใหญ่มาจากการต้องรองรับทุกไซต์และทุกสถานการณ์การใช้งาน แต่ถ้าทำเพื่อตัวเอง ผมก็โฟกัสให้ไซต์ที่ผมสนใจทำงานได้ดีพอได้ ปัญหาจึงลดลงอย่างมาก อยากให้คนจำนวนมากขึ้นลองทำโปรเจกต์ที่ “เป็นไปไม่ได้” ต่อให้ทั้งโปรเจกต์ยังไม่เป็นประโยชน์กับคนอื่นทันที บางส่วนก็อาจมีประโยชน์ได้ และบางครั้ง สิ่งที่ใหญ่กว่าก็อาจเกิดจากโปรเจกต์ส่วนตัวเล็ก ๆ เหมือน Linux
ถ้าเอาเวลาสักครึ่งหนึ่งที่ใช้ไปกับการบอกว่าโปรเจกต์ของใครสักคนไร้ประโยชน์และเสียเวลา ไปทำสิ่งที่สร้างสรรค์ โลกคงมีโปรเจกต์ที่เจ๋งและน่าสนใจกว่านี้อีกมาก ล้มเหลวกับสิ่งที่กล้าหาญและทะเยอทะยาน ยังดีกว่าไม่ลองทำเลย
ไม่จำเป็นต้อง implement ทุกฟีเจอร์ของเว็บเบราว์เซอร์สมัยใหม่ ไม่ต้องมี Battery API, Game Controller API, USB อะไรพวกนั้นก็ได้ แค่โฟกัสที่ HTML, CSS, JS ที่สำคัญก็พอ แม้ในกรณีแย่ที่สุด คุณก็จะได้เรียนรู้อะไรใหม่ ๆ ขอให้โปรเจกต์นี้โชคดี
คำพูดที่ว่า “ไม่ได้คาดหวังอะไรเลย ไม่ได้คาดว่าจะทำให้เสร็จ ถ้าไม่มีคนช่วย โปรเจกต์นี้ก็คงตายในไม่ช้า ไม่ได้คาดหวังว่าจะเป็นเบราว์เซอร์ผู้ครองตลาดที่จะโค่นผู้เล่นยักษ์ใหญ่ในตลาด” คล้ายกับ ประกาศ Linux ครั้งแรก ที่ Linus โพสต์ใน comp.os.minix
โพสต์นั้นเริ่มว่า “สวัสดีทุกคนที่ใช้ minix ผมกำลังทำระบบปฏิบัติการเสรีสำหรับเครื่อง 386(486) AT clone เป็นแค่งานอดิเรก เลยคงไม่ใหญ่และเป็นมืออาชีพเหมือน gnu…” แล้วบอกว่า port bash กับ gcc แล้ว น่าจะมีอะไรที่ใช้งานได้จริงในอีกไม่กี่เดือน และแม้จะไม่สัญญาว่าจะ implement ให้ แต่ก็ขอให้บอกฟีเจอร์ที่ต้องการมา ตอนท้ายยังบอกด้วยว่าไม่มีโค้ดของ minix เลย มีระบบไฟล์แบบ multithreaded แต่ไม่ portable และอาจไม่รองรับอะไรนอกจากฮาร์ดดิสก์ AT
ไม่มีใครรู้ว่าโปรเจกต์จะไปได้ไกลแค่ไหน และถ้าเป็นสิ่งที่ทำด้วยเหตุผลของตัวเอง ในบางแง่มันก็ไม่ได้สำคัญขนาดนั้นด้วย
ผมไม่คุ้นกับบรรยากาศเชิงลบต่อเบราว์เซอร์และ เว็บแบบเปิด บน HN แบบนี้เลย มองว่าเป็นความพยายามที่มีคุณค่ามาก ไม่ว่าจะสำเร็จหรือไม่ก็ตาม
แม้ผลลัพธ์จะเป็นแค่เบราว์เซอร์ครึ่ง ๆ กลาง ๆ ที่ไม่ถูกชักจูงด้วยแรงจูงใจของบริษัทยักษ์ใหญ่ด้านเทคโนโลยี แต่มันก็อาจมีประโยชน์ในวันที่สักวันหนึ่งเราต้องเลิกพึ่งพา Firefox ผมชอบ Firefox มากจึงหวังว่าวันนั้นจะไม่มาถึง แต่ผมตระหนักว่าเวลาจะเข้าถึงเว็บ เบราว์เซอร์ของผมเองเป็นเหมือนคอขวดอย่างหนึ่ง ยังมีเว็บไซต์อื่นสำหรับดูคอนเทนต์เดียวกัน และยังมีแบรนด์คอมพิวเตอร์อื่นให้ใช้ได้ แต่ตรงกลางมักจะมี Firefox อยู่เสมอ มีเบราว์เซอร์อื่น ๆ เหมือนกัน แต่ส่วนใหญ่ดูเหมือนจะตั้งอยู่บนฐานของ Googlium หรือชื่ออะไรก็ตามในปัจจุบัน ดังนั้นขออวยพรให้โชคดีและประสบความสำเร็จ ผมตั้งใจจะสมัคร RSS feed แล้วแวะดูโปรเจกต์เป็นครั้งคราว
จริง ๆ แล้วก็มีหลักฐานว่ามันเป็นไปได้ Ladybird ถูกสร้างขึ้นตั้งแต่ศูนย์ และเดิมทีถึงขั้นสร้างไลบรารีมาตรฐาน C++ เองด้วย หลังจากทำพาร์ตไทม์มา 3–4 ปี ตอนนี้ก็รัน Discord ได้แล้ว แม้จะยังช้าก็ตาม ตอนนี้ยังมีนักพัฒนาเต็มเวลาด้วย ส่วน GoSub ถ้าดูจาก cargo.lock ดูเหมือนจะไม่ได้พยายามทำทุกอย่างตั้งแต่ศูนย์ และมีแนวโน้มสูงว่าจะใช้ของสำเร็จรูปสำหรับอย่างตัวถอดรหัสภาพ จึงมีศักยภาพที่จะเติบโตได้เร็วกว่า
ตอนนี้คำว่า “เขียนเบราว์เซอร์ตั้งแต่ศูนย์” แทบจะหมายถึงการทำ ระบบปฏิบัติการพกพาในกล่อง หรือก็คือการทำเว็บแพลตฟอร์ม และทำให้เข้ากันได้กับสิ่งต่าง ๆ ที่ Google ตัดสินใจเพิ่มเข้าไปในเบราว์เซอร์ของตัวเอง
เบราว์เซอร์มีฟีเจอร์และ API กว้างขวางเกินไป และตามการเปลี่ยนแปลงฟีเจอร์อย่างไม่หยุดหย่อนกับอำนาจครอบงำของ Google ได้ยาก จนแม้แต่ Microsoft ก็ยังทำไม่สำเร็จ มีโปรเจกต์ส่วนตัวที่เกี่ยวข้องชื่อ Tersenet https://github.com/runvnc/tersenet
มันแทบจะเป็นแนวคิดมากกว่าสิ่งที่มีการ implement จริง แต่ตั้งใจเลือกข้อกำหนดเพื่อให้ผู้คน implement ได้ ซับซ้อนน้อยกว่าเว็บเบราว์เซอร์เต็มรูปแบบมาก ยังมีการถกเถียงที่เกี่ยวข้องกับ GPT-4 ด้วย https://chat.openai.com/share/16d02b78-f876-4c87-949a-a60b4f...
โปรเจกต์ Gemini ที่มีอยู่จริงและใช้งานได้จริงก็เกี่ยวข้องเช่นกัน https://geminiprotocol.net/ มันเป็นแรงบันดาลใจให้ไอเดีย Tersenet
WebSQL, IndexedDB, service worker, WebGL, WebGPU, WebBluetooth, WebRTC อะไรพวกนี้ก็แค่ทำเหมือนไม่มีอยู่ก็พอ เว็บไซต์จริง 99% คือไซต์ที่ไม่ใช่เว็บ “แอป” จะไม่สูญเสียฟังก์ชันไป
โดยส่วนตัว ผมอยากให้มีเอนจินทางเลือกมากกว่านี้ นอกเหนือจากวัฒนธรรมเดี่ยวของ Blink กับญาติของมันอย่าง WebKit และ Gecko/Quantum อยากให้มีอะไรสักอย่างมาแทนตำแหน่งที่ KHTML เคยครองก่อนถูก WebKit ดูดกลืน หรือเป็นอีกตัวเลือกโอเพนซอร์สให้ทดลองได้
ผมอยากให้คนจำนวนมากที่เห็นด้วยกับแนวคิดนี้ตกลงกันได้ว่าจะใช้ส่วนย่อยไหน และเราก็อาจพอใจกับเบราว์เซอร์ที่ไม่ได้ทำทุกอย่างที่เบราว์เซอร์ของ Google ทำ ผมใช้ uMatrix ปิดฟีเจอร์ของ Google ไปเยอะมาก และไม่เคยใส่โดเมน google.com ไว้ใน allow list แต่ก็ยังใช้งานเหมือนพิสูจน์ได้ว่าโลกไม่ได้แตก เว็บไซต์ที่ใช้ไม่ได้มีจำนวนน้อยเมื่อเทียบกัน
เว็บไซต์ส่วนใหญ่ไม่ได้อยากทำตามเทคโนโลยีโฆษณา, AMP, DRM และสิ่งทำนองนั้นที่เพิ่งถูกสร้างขึ้นมาเพื่อ Google โดยเฉพาะ
บางที Mozilla และที่อื่น ๆ อาจต้องสร้าง JavaScript “VM” อิสระที่ทุกคนใช้ได้
ในฐานะคนที่เคยตัดสินใจเขียนเบราว์เซอร์เอง ทั้งที่ไม่รู้อะไรเลยว่าเบราว์เซอร์ “จริง ๆ” ทำงานอย่างไร แถมยังทำเอนจินเลย์เอาต์แบบกำหนดเองด้วย ผมอยากบอกว่าให้ลองทำไปเลย
การได้เห็นเว็บไซต์ถูกเรนเดอร์ด้วยโค้ดของตัวเองเป็นเรื่องที่คุ้มค่ามาก ไม่ว่าโค้ดหรือเอาต์พุตจะเละเทะแค่ไหนก็ตาม โปรเจกต์ของผมอายุราว 2 ปีครึ่ง และตอนนี้เรนเดอร์ HN กับบล็อกง่าย ๆ ได้พอใช้ ถ้าถามว่ามันดีกว่า w3m ที่เดิมทีตั้งใจจะมาแทนที่อย่างเป็นกลางไหม ก็ไม่จำเป็นต้องใช่ ผมยังกลับไปใช้ w3m สำหรับงานบางอย่างอยู่ แต่ก็ได้ใช้มันอย่างมีประโยชน์กับงานที่ไม่เคยคิดมาก่อน ได้เรียนรู้เรื่องการเขียนโปรแกรมมากมาย และที่สำคัญมันทำงานได้ ซึ่งเจ๋งดี https://sr.ht/~bptato/chawan
การสร้างเบราว์เซอร์หมายถึงการสร้าง เอนจินเรนเดอร์และเอนจินเลย์เอาต์ ไม่ใช่ว่าทำไม่ได้ แต่เป็นงานค่อนข้างใหญ่
อย่างไรก็ตาม ยังมีงานอีกมากที่มีโอกาสให้ผลลัพธ์มากกว่า เช่น พอร์ต Servo ไปยัง Nyxt Browser หรือฟอร์ก WebKit/Servo/Gecko แล้วตัดมาตรฐานเว็บเชิงรุกรานที่เป็นอันตรายต่อผู้ใช้ ซึ่งบริษัทโฆษณายัดเข้ามาในช่วง 10 ปีที่ผ่านมาออกไป ถ้าสุดท้ายสิ่งเหล่านี้ก็เป็นงานที่ต้องทำอยู่ดีเมื่อเริ่มทำจากศูนย์ ก็ควรเริ่มจากคอมมูนิตี้เดิมที่พร้อมร่วมงานกันอยู่แล้ว มากกว่าการเริ่มจากพื้นฐานทั้งหมด
Gecko แทบจะเป็นนิยามของโมโนลิธ ทำให้เป็นไปไม่ได้ที่จะตัดพื้นผิวการโจมตีออกไป และแม้แต่ Tor เองก็ยังใช้วิธีแทนที่สตับที่ย่ำแย่ ซึ่งพังทุกครั้งที่ API ภายในหรือบริดจ์เปลี่ยน อย่างไรก็ตาม การตาม upstream ให้ทันคนเดียวเป็นไปไม่ได้ จึงต้องมีผู้ร่วมพัฒนาและผู้ดูแล จากมุมมองด้านความปลอดภัยไซเบอร์ ผมได้จัดทำเอกสารพื้นผิวการโจมตีให้มากที่สุดเท่าที่ทำได้ และจดงานที่เหลือกับสิ่งที่ท้ายที่สุดต้องเอาออกไว้แล้ว https://github.com/tholian-network/retrokit/blob/main/SECURI...
อาจค่อนข้างเป็นความเห็นส่วนตัว เพราะผมอยากใช้ RetroKit เป็นเว็บวิวของ Browser Stealth ของผม Browser Stealth ทำงานเป็นพร็อกซีกรองข้อมูล สเครเปอร์ และแคชแบบกระจายศูนย์ https://github.com/tholian-network/stealth ตอนนี้กำลังเขียนใหม่ด้วย golang
ต้องนำไปผสานกับเอนจินเลย์เอาต์ข้อความอย่าง https://github.com/pop-os/cosmic-text และยังไม่รองรับทุกฟีเจอร์ ฟีเจอร์สำคัญที่ยังขาดอยู่ตอนนี้คือ
float,display: inline-block,box-sizing: content-box,position: staticแต่รองรับ Block, Flexbox และ CSS Grid แล้ว และกำลังเพิ่มต่อไปแน่นอนว่าเป็นงานใหญ่ แต่ก็ไม่ถึงกับเป็นสิ่งที่เป็นไปไม่ได้ที่สุดสำหรับทีมเล็ก ๆ ที่ทุ่มเท
เริ่มจากการเรนเดอร์เว็บไซต์ HTML ที่เรียบง่ายอย่างสมเหตุสมผลก็พอ ไม่จำเป็นต้องรีบ และไม่มีกฎเข้มงวดว่าต้อง implement ทุกซอกทุกมุมของมาตรฐาน เว็บเบราว์เซอร์และเว็บนั้นมีความเป็นมนุษย์อย่างงดงาม
การนำเอนจินเดิมมาเชื่อมต่อและทำให้เป็นโมดูลาร์พอที่จะเปลี่ยนได้ตลอดเวลา ก็ยังเป็นเบราว์เซอร์ที่สมบูรณ์อยู่ดี ส่วนตัวผมคิดว่าคนที่นี่โฟกัสกับเฟืองภายในมากเกินไป และจริง ๆ แล้วนอกจาก rendering/layout/scripting เรายังต้องมี อินเทอร์เฟซและองค์ประกอบอื่น ๆ ที่ดีกว่านี้ด้วย
ขอเป็นกำลังใจให้ ลองทำต่อไปเถอะ
ผมเคย implement ส่วนเล็กมาก ๆ ของ อัลกอริทึม ORC Solver ด้วย Python และใช้ wxWidgets สำหรับการเรนเดอร์ ใช้ API ช่วงข้อความของ wxWidgets เพื่อคำนวณความกว้างข้อความ เอกสาร white paper ของ ORC Solver อยู่ที่นี่ https://yuejiang-nj.github.io/Publications/2020CHI_ORCSolver...
ตอนนี้กำลังคิดอยู่ว่าจะ implement branch and bound อย่างไร ถ้ามีข้อมูลที่เกี่ยวข้องก็คงดี ถ้าจะดูอัลกอริทึมการจัดเรียงตัวพิมพ์ คงต้องศึกษา codebase ของ TeX และการใช้ไลบรารี JavaScript ชื่อ Masonry สำหรับ bin packing ของเลย์เอาต์ก็สนุกมากเหมือนกัน
“ถ้าอยากได้ HTML ของข้า ข้าก็จะให้! ไปค้นหาดูสิ! ข้าได้ทิ้งทุกสิ่งในโลกไว้ที่นั่นแล้ว”
“ดังนั้นเหล่าแฮ็กเกอร์จึงมุ่งหน้าสู่ HyperText Line เพื่อตามความฝัน และโลกก็เข้าสู่ ยุคมหาเบราว์เซอร์ อย่างแท้จริง!”
หลายปีมานี้ผมเชื่อว่าเบราว์เซอร์เป็นภูเขาที่ไม่อาจข้ามได้ แต่ตอนนี้ดูเหมือนผู้คนจำนวนมากขึ้นเรื่อย ๆ เชื่อว่าเราทำได้ จากการวิเคราะห์แบบ 2 วินาที ผมคิดว่ากระแสนี้เกิดขึ้นเพราะผู้สร้างเบราว์เซอร์รายใหม่ไม่ได้พยายามเลียนแบบและแข่งขันกับสัตว์ประหลาดยักษ์ที่มีอยู่เดิม แต่เพราะพวกเขา อยากเปลี่ยนเว็บ ผมชอบนะ
ในส่วนทางการเมืองของบทความ โลกมันพังอยู่แล้ว และการอ่านแต่ข่าวที่พัง ๆ ก็เป็นเรื่องเหนื่อยล้า เพียงแต่มองว่าการตัดขาดจากความเป็นจริงแล้วกลายเป็น “ไม่ยุ่งการเมือง” คือการยอมแพ้ต่อมนุษยชาติ หรือก็คือการยอมแพ้ต่อลูก ๆ และหลาน ๆ ของตัวเอง รวมถึงลูก ๆ ของเพื่อนสนิทที่สุด
ไม่จำเป็นต้องเปลี่ยนโลกก็ได้ แค่ การเปลี่ยนแปลงเล็ก ๆ ในชุมชนของตัวเอง ก็เพียงพอแล้ว โดยเฉพาะในฐานะ coder สิ่งที่เราสร้างอาจส่งผลต่อผู้คนหลายพันคนทั่วโลกและเปลี่ยนทิศทางได้ บางครั้งก็คิดว่า ถ้าทุกคนลงทุนเวลาเพียง 3~5% ไปกับการสนับสนุนชุมชนและกิจกรรมบางรูปแบบ สถานการณ์จะต่างออกไปไหม
ไม่มีอะไรที่อ่านจากข่าวแล้วจะเปลี่ยนวิธีโหวตของผมได้ ซึ่งนั่นน่าจะเป็นเหตุผลที่ดีที่สุดในการดูข่าวจริง ๆ
ถ้าจะพูดให้ชัด ผมยอมแพ้ต่อโลกแล้ว แต่ลูกของคนอื่นไม่ใช่ความรับผิดชอบของผม ผมทำ “สิ่งที่ถูกต้อง” เท่าคนอื่น ๆ แต่ไม่มากไปกว่านั้น เมื่อก่อนผมเคยกังวลเรื่องพวกนี้ พยายามลดรอยเท้าส่วนบุคคล และคิดถึงความยั่งยืนกับคนรุ่นต่อไป แต่ตอนนี้หมดหวังแล้ว มันรู้สึกเหมือนสู้ทวนกระแสน้ำ ตอนนี้ผมแค่พยายามไม่ให้รอยเท้าของตัวเองใหญ่กว่าค่าเฉลี่ย และทำดีต่อคนรอบตัว
ถ้า Rust เป็นสิ่งจำเป็น ผมคิดว่าการไปมีส่วนร่วมกับ Servo แล้วเริ่มจาก PR เล็ก ๆ เพื่อเรียนรู้น่าจะมีประโยชน์กว่า https://github.com/servo/servo
แต่ก็เข้าใจ เพราะผมเองก็เคยทำโปรเจกต์ “ตั้งแต่ศูนย์” เนื่องจากอ่าน codebase เดิมยาก หรือคิดว่าตัวเองทำได้ดีกว่า แต่ละคนก็มีวิธีของตัวเอง
เช่นเดียวกัน Servo ถูกออกแบบมาเพื่อแทนที่บางส่วนของเบราว์เซอร์ Firefox จึงต้องใส่ให้พอดีกับช่องว่างที่มี “รูปทรงแบบ Gecko” ตัวอย่างเช่น เพื่อความเข้ากันได้กับส่วนที่เหลือของ Firefox จึงใช้สตริง UTF-16 ในหลายจุด ถ้าเป็นตอนนี้ อาจเขียน Servo ใหม่ด้วย Rust สมัยใหม่ ให้เล็กลง คล่องตัวขึ้น และอาจเร็วขึ้นได้