ครั้งหนึ่งเมื่อนานมาแล้ว ก่อนที่พระราชินีแห่งอังกฤษจะแต่งตั้งให้เป็นอัศวิน ท่านเซอร์ ทิม เบอร์เนอร์ส-ลี (Tim Berners-Lee) ทำงานเป็นโปรแกรมเมอร์อยู่ที่ CERN ซึ่งเป็นห้องแล็ปทางฟิสิกส์ตั้งอยู่ในสวิสเซอร์แลนด์

เนื่องจากบรรดานักวิทยาศาสตร์ทั่วโลกจำเป็นต้องติดต่อสื่อสารและแบ่งปันข้อมูลงานวิชาการต่างๆกันอยู่เสมอ ทิมก็เลยเสนอโครงการพัฒนาระบบบริหารข้อมูลขึ้นในขณะทำงานที่ CERN (ปี 1989) และทำเสร็จในปีถัดมา ได้ Web Editor, Web Browser และ Web Server ชุดแรกของโลกออกมา โครงการนี้ใน CERN ก็ไม่ได้ให้ความสำคัญนัก ขออนุมัติให้ทำไม่ผ่านด้วยซ้ำ แต่เจ้านายใจดีให้ทำไปได้ และเมื่อทำเสร็จ ทิม เสนอให้ CERN มอบผลงานชิ้นนี้ให้เป็นสาธารณะประโยชน์ (public domain) และ CERN ก็ตกลงตามนั้น … นับเป็นการตัดสินใจที่เป็นคุนูปการ ต่อชาวโลก ถ้า CERN คิดจดสิทธิบัตรตอนนั้น ป่านนี้เราอาจจะใช้โทรเลขกันอยู่

หลังจากนั้นในปี 1994 ทิมก็ลาออกจาก CERN ไปทำงานที่ MIT และตั้ง World Wide Web Consortium (W3C) องค์กรที่ทำหน้าที่กำหนดมาตรฐานของ Web มาจนถึงทุกวันนี้

Browser ที่ได้รับความนิยมแพร่หลายของโลกตัวแรกคือ Mosaic ที่สร้างโดย Marc Andreessen และ Eric Bina ขณะทำงานที่ NCSA, มหาวิทยาลัยอิลินอยส์ ตอนนั้น www เริ่มออกนอกสถาบันการศึกษา ไปสู่การใช้งานภาคเอกชนแล้ว ดังนั้นในปี 1994 มาร์ก ลาออกมาตั้งบริษัท Netscape และระดมทุนในตลาดหลักทรัพย์ในปี 1995 เป็น IPO ที่ใหญ่เป็นประวัติการณ์ในตอนนั้น ใหญ่จนไมโครซอฟต์ที่ไม่สนใจอินเตอร์เน็ตในตอนนั้นต้องเปลี่ยนใจ

ก่อนหน้านั้นอีตา Bill Gates ไม่สนใจอินเตอร์เน็ตเลย ในหัวคิดแต่ใช้ CD ROM ใส่โปรแกรมและข้อมูลขาย ลงทุนไปซื้อข้อมูลมากมายมาทำสารานุกรมใส่ CD ROM ขาย (Encarta) และหมกมุ่นกับการขายวินโดว์สกับออฟฟิศเป็นหลัก จน Netscape ทำ IPO ได้เงินมหาศาล ก็เริ่มรู้ตัวว่าอินเตอร์เน็ต (www) เป็นภัยใหญ่หลวงต่อไมโครซอฟต์ ก็เลยต้องตัดสินใจทำแข่ง จะทำเองก็ช้าไม่ทันการณ์ ไมโครซอฟต์จึงไป license Mosaic จาก Spyglass ซึ่งไป license มาจาก NCSA อีกต่อนึง และถือกำเนิด Internet Explorer ขึ้นมา ดังนั้น Netscape และ Internet Explorer ต่างก็มีต้นกำเนิดเดียวกันจาก Mosaic ใน About Box ของ IE เวอร์ชั่นแรกๆจึงมียี่ห้อ Mosaic ติดหราอยู่ แล้วก็ค่อยๆละลายไป ด้วยการเขียนโค๊ดใหม่ๆยัดเข้าไป

โค๊ดใหม่ที่ว่านี่คือโค๊ดที่ล็อกให้ผู้คนออกไปใช้ Browser นอกวินโดว์สไม่ได้ ใส่สิ่งที่ผูกกับวินโดว์สเข้าไป และใช้กลยุทธ์ขายพ่วงประกาศศึกกับ Netscape เป็น “Browser War” ในตำนาน

แม้ว่าจะระดมทุนมาได้ไม่น้อย แต่เจอการขายพ่วงของไมโครซอฟต์เข้าไป Netscape ก็ถึงกับเจ๊ง ไมโครซอฟต์กลายเป็นผู้นำด้านอินเตอร์เน็ตไปชิบ แต่ทางรัฐบาลสหรัฐก็ฟ้องไมโครซอฟต์ในข้อหาผูกขาด และชนะความ ศาลมีคำสั่งให้แยกบริษัทไมโครซอฟต์ออกเป็นสองบริษัท OS กับ App ไม่ให้ขายพ่วง ภายหลังไมโครซอฟต์ไปทำอีท่าไหนไม่รู้ อุทธรณ์ไปอุทธรณ์มา ไม่ต้องทำตามคำสั่งศาล จนเป็นที่ซุบซิบครหากันอยู่หลายปี…

ช่วงนั้นเราก็เข้าสู่ยุคมืดของ www ครับ Internet Explorer ครองเมือง ใส่ Feature บ้าบอ VBX, Active X, สารพัดที่จะผูกคนให้อยู่กับความล้าหลัง ช่วงนั้นเป็นช่วง Dot Com Boom เว็บไม่ได้เป็นอะไรมากมายเกินไปกว่า ข้อมูลของบริษัท ส่วนใหญ่เป็นแค่ static web ใส่ข้อมูลของบริษัทไว้ให้ลูกค้าอ่าน แต่โลกก็รู้ดีว่า web มีความสำคัญต่อธุรกิจแน่ๆ ความเชื่อดังกล่าวทำให้บรรดานักลงทุนใส่เงินเข้าไปในธุรกิจไอทีกันขนานใหญ่จนมันพองโตและแตกโพล๊ะ กลายเป็นวิกฤติ Dot Com ในช่วงราวๆปี 2000

โชคดีของขาวโลกตรงที่ตอน Netscape เหลือเวลาไม่กี่วันจะออกตลาด ทิมเกิดคิดว่า Web น่าจะมี programming Language ใส่ไปด้วย ก็เลยไปจ้าง Blendan Eich มาทำภาษาง่ายๆใส่ลงไป อีตา Eich ใช้เวลา 10 วันทำ JavaScript ใส่ลงไปใน Netscape วินาทีสุดท้ายก่อนถึงเวลาออกตลาด

JavaScript ตอนแรกๆนั้นเป็นแค่ภาษาเขียนโปรแกรมสำหรับทำอะไรเล็กๆน้อยๆ ดาวร่วง หิมะตก เก็บเม้าส์คลิ๊ก อะไรทำนองนั้น แต่กลายเป็นปัจจัยสำคัญเอามากของเว็บช่วงหลังปี 2000 เมื่อบรรดาธุรกิจต่างเชื่อว่าต้องทำเว็บแอ๊พ ที่ซับซ้อนขึ้น และมีกระแสใหม่เกิดขึ้นคือ User Generated Content เรียกเว็บนี้ว่า Web 2.0 (อีตา Tim O’Reilly เป็นคนตั้งขึ้น) คนเริ่ม upload รูปภาพ วิดีโอ เขียนบล็อก และเกิด Social Network มาเป็นแถวๆ บรรดาเว็บพวกนี้ต้องใช้ JavaScript กันทั้งสิ้น แต่ JavaScript ตอนนั้นเป็นแค่ภาษาห่วยๆ ช้าก็ช้า ทำอะไรก็ไม่ได้มาก code ส่วนใหญ่ต้องไปวิ่งทางฝั่ง server แต่เน็ตยุคนั้นก็ช้า

ราวๆในปี 2008 เกิดเหตุการณ์สำคัญสองอย่าง คือ Google ออก JavaScript Engine ใหม่ เป็น JIT (Just in time compiler) ทำงานเร็วขึ้น 10 เท่าได้ ตามติดมาด้วย FireFox และ Safari แข่งกันในสนามใหม่ ปล่อยให้ IE ยืนงงอยู่หลายปีกว่าจะหันมาทำ Edge กับเค้า

ในขณะเดียวกันช่วงนั้น ศาสดาก็ออก iPhone ออกมา Mobile Safari นั้นดีเอามากๆ ทำให้เริ่มเกิดยุคของ Mobile Internet มาด้วยพร้อมๆกัน หลังจาก iPhone ออก คริสต์มาสปีนั้น traffic web จาก iPhone อย่างเดียวก็กลบ traffic ของการใช้อินเตอร์เน็ตจากโทรศัพท์เทพของโนเกียหลายร้อยรุ่นชนิดไม่เห็นฝุ่น

ศาสดาจ๊อบส์ตั้งใจในตอนแรกว่าจะให้ iPhone นั้นรันแต่ Web App ไม่ได้คิดจะเปิด API ให้คนมาเขียนแอพ แต่ไม่รู้เฮงหรือซวย มีคนแกะทำ Jailbreak iPhone ได้ แล้วก็แห่กันไปเขียนโปรแกรมใส่ iPhone กัน จน Apple ทนไม่ได้ต้องยอมเปิด API และทำ iOS SDK ออกมาอย่างเป็นเรื่องเป็นราว เกิดตลาด App ขึ้นมากลายเป็นตลาดใหญ่…

Apple ก็เขางอก หลังจากนั้น Safari ซึ่ง base บน WebKit โครงการทำ WebEngine ที่ดีที่สุดในตอนนั้น ก็เริ่มชะลอตัว Apple ค่อยๆลดความเร็วของการพัฒนา Safari ลง มาให้ความสำคัญของ App มากกว่า แถมประกาศห้ามคนอื่นเอา Web Engine อื่นมาใช้ใน iPhone ขนาด Chrome ของ Google ก็ไม่พ้นกฎนี้ ต้องกล้ำกลืนใช้ engine Safari มาจนทุกวันนี้ แถมห้ามไม่ให้ JavaScript ใช้ JIT compiler ด้วย ให้ใช้แค่ JS interpreter ให้มันทำงานช้าๆ จะได้ไม่ไปแข่งกับ App

ตลาดเว็บแอ็พ ก็เลยชะลอตัวลงในฝั่ง Mobile ทาง Google และ FireFox ยังคงพัฒนาเว็บอย่างต่อเนื่อง ทีนี้การเขียนโปรแกรมในเว็บที่ใช้ JavaScript มันสู้ทำแอ็พไม่ได้ เพราะยังไงก็ทำงานช้ากว่า เนื่องจากเป็นภาษาที่มี Garbage Collector และ เป็น Typleless

Code JavaScript (ไม่ว่าเขียนเอา หรือ compile เอา) เมื่อโหลดโดย WebBrowser ก็ยังต้อง parse JS code แล้วไปผ่าน interpreter อยู่ดี แม้ว่า JS engine ใหม่ๆจะมี feature Just-in-time compiler (JIT) ก็ตาม

การทำงานของ JIT นั้น ใช้การสร้าง JavaScript มาอีกตัวนึงเรียกว่า Monitor คอยเฝ้าดูการรันของ code ว่า code ตรงไหนที่มีการทำงานบ่อย เมื่อพบว่า code ส่วนไหนมีการทำงานบ่อย ก็จะ mark ว่าบริเวณนั้น “warm” ถ้าบ่อยมากก็เรียกว่า “hot” area

ตรงที่เป็น warm area ก็จะส่ง code ส่วนนั้นไป compile ด้วย base compiler ก่อน (ยังไม่มีการ optimize) เพราะต้องทำแข่งกับเวลา ถ้าตรงไหน hot มากๆ แล้ว จึงส่งไป compile แบบ optimize ครับ เพราะใช้เวลา compile มากกว่า

จะเห็นได้ว่า JIT จะทำให้ code วิ่งเร็วขึ้นก็ต่อเมื่อมีส่วนที่รันบ่อย เช่นใน loop หรือ function ที่ใช้บ่อย เท่านั้น

ตอนนั้นฝั่ง Google พยายามทำให้ โปรแกรมในเว็บเร็วขึ้น ก็เกิดโครงการ NaCL ขึ้นมา ใช้ C/C++ มารันใน Sandbox แต่ใช้ยากและข้อจำกัดเยอะ แถม browser อื่นก็ไม่เล่นด้วย

แต่ฝั่ง Mozilla FireFox สร้าง asm.js  ขึ้นมาโดย Alon Zakai โดยกำหนด subset ของ JavaScript ขึ้นมาแล้วเขียน Transpiler ชื่อ Emscripten ซึ่งใช้ CLang compile C/C++ แล้วแปลงเป็น JavaScript (เลือกเฉพาะส่วน JavaScript ที่ทำงานแบบ Type Fixed เพื่อให้ไม่ต้องให้ Garbage Collector ทำงาน) ผลคือสามารถ compile C/C++ โปรแกรมมหาศาลในโลกนี้เป็น JavaScript ได้ ก็เกิดโลกใหม่ของการเขียนโปรแกรม

W3C เห็นดีงามใน concept นี้และเห็นว่า asm.js ยังเป็น JavaScript ที่มีขนาดใหญ่ จึงกำหนด binary format ขึ้นมาใหม่ เรียกว่า WebAssembly เป็นคำสั่งระดับล่างคล้ายๆคำสั่งใน CPU และชักชวนให้ Web Browser ทั้งหลายมาช่วยสนับสนุน ให้สามารถ รัน โปรแกรมใหนรูปแบบ Binary นี้ได้

WebAssembly ในช่วงแรกนี้ใช้ Embsripten จากโครงการ asm.js มาเป็น compiler และเนื่องจาก Emscripten ใช้ LLVM เป็นต้นตอของการ Transpile ทำให้การ port โปรแกรมจากภาษาอื่นทำได้ง่าย

ยุคของเว็บก็เข้าสู่ยุคที่สาม โดยโปรแกรมแทบทุกภาษาสามารถ compile มาเป็น WebAssembly ได้ และ Browser ทุกตัว (รวมทั้ง Safari เจ้าปัญหา) ก็สามารถรันได้ รวมทั้งรันฝั่ง server บน Node.js ได้ด้วย

เราก็เข้าสู่ยุคของการเขียนโปรแกรมที่อิสระมากขึ้น เขียนภาษาอะไรก็ได้ แล้วไปรันบน OS อะไรก็ได้ (ตอนนี้ได้หมดทั้งใน Linux, MacOS, Windows, iOS, Android)

แต่หนทางของสงครามระหว่าง Web กับ App ใน iOS ยังไม่จบ แม้ว่า Safari ใน iOS จะวิ่ง WebAssembly ได้แล้ว มี service Workers สำหรับวิ่ง offline ได้บ้างแล้ว แต่ยังกั๊ก feature สุดท้ายอยู่คือ Push Notification

นั่นแหละ ประวัติศาสตร์ของเว็บ จบดื้อๆครับ เมื่อยมือ….วันหลังจะมาเล่าเรื่อง WebAssembly แบบละเอียดอีกที