เนื่องจากบล็อกอันนี้ Firefox 2.0 Alpha 1 มาแว้วว เจอคำถาม
“แต่ผมก็งงๆเรื่อง trunk build อะไรพวกนี้เหมือนกัน ตกลงอันไหนใหม่ที่สุดก็ไม่รู้ แล้วทำไมมันกำหนดหนดเป็นเวอร์ชั่น 1.6a อันนี้ก็ไม่รู้อีก”
แบบว่าอยากตอบอะครับ แต่ตอบทั้งทีแล้วขอตอบยาวๆ หน่อย ทำเป็น FAQ (จริงๆ อ่าน “เอฟเอคิว” แต่ผมอ่าน “แฟค!”) เชิงลึกซะละกันนะ
1. ผลิตภัณฑ์ของ Mozilla มีอะไรบ้าง?
พลิกตำราดูแล้ว ผลิตภัณฑ์ที่ Mozilla สนับสนุน “อย่างเป็นทางการ” บนหน้าเว็บของ Mozilla.org เอง มีดังนี้
- Firefox เว็บเบราว์เซอร์
- Thunderbird อีเมลไคลเอนต์
- Mozilla Suite ชุดโปรแกรมสำหรับอินเทอร์เน็ต ประกอบด้วยเบราว์เซอร์ อีเมล และตัวเขียนเว็บเพจ ปัจจุบันหยุดการพัฒนาที่เวอร์ชัน 1.7 เท่านั้น
- Bugzilla โปรแกรมจัดการบั๊ก (bug tracker) ที่นาซ่าก็ใช้ เป็นเว็บเบส เขียนด้วย Perl
- Camino เว็บเบราว์เซอร์ (มีเฉพาะบน Mac OS X)
- Calendar Project โปรแกรมปฏิทิน ประกอบด้วย Sunbird ซึ่งเป็นโปรแกรมแยก และ Lightning ซึ่งเป็น Extension ใช้กับ Firefox และ Thunderbird
หกตัวเท่านั้นน่อ สำหรับโปรแกรมอื่นๆ เช่น Nvu (ตัวเขียนเว็บเพจ) หรือ Seamonkey (Mozilla Suite ที่กลุ่มผู้ใช้ช่วยกันพัฒนาต่อ) ถึงแม้จะเกี่ยวข้องกับ Mozilla.org บ้าง แต่ก็ไม่ใช่โปรแกรมที่ Mozilla.org สนับสนุนอย่างเป็นทางการ
2. Gecko คืออะไร?
ถ้าพูดถึง “เว็บเบราว์เซอร์” มีส่วนประกอบหลายอย่าง เช่น ส่วนโหลดข้อมูล, ส่วนแสดงผล, ส่วนจัดการกับแคช, ส่วนติดต่อผู้ใช้, ส่วนจัดการกับ Bookmark, ส่วนจัดการกับ Feed เป็นต้น
ส่วนที่อ่านข้อมูล HTML แล้วมาแสดงผลเป็นหน้าเว็บบนจอภาพ ศัพท์เทคนิคเรียก Rendering Engine ซึ่งโปรแกรมทุกตัวของ Mozilla.org นั้นใช้ engine ตัวเดียวกันชื่อว่า Gecko (แปลว่าตุ๊กแก)
Gecko ถือเป็น Layout Engine ที่มีความสามารถติดอันดับต้นๆ ของโลกซอฟต์แวร์ สนับสนุนมาตรฐานเพียบ แต่ก็ยังไม่สามารถแสดงผล Acid2 ได้ถูกต้อง 100% (เรื่อง Acid2 มาว่ากันทีหลัง)
Gecko นับเลขเวอร์ชันตาม Mozilla Suite ปัจจุบันตัว Suite หยุดการพัฒนาไปแล้ว แต่ Gecko ยังนับเลขเวอร์ชันต่อ โดยเวอร์ชันสำหรับ Firefox 2.0 จะใช้ Gecko 1.8.x
รายละเอียดเพิ่มเติม เช่น โปรแกรมไหนบ้างที่ใช้ Gecko หรือมาตรฐานที่สนับสนุน ดูใน Wikipedia หน้านี้ ละเอียดยิก
3. XUL คืออะไร?
XUL เป็นภาษาที่ต่อยอดมาจาก XML เพียงแต่ XUL จะใช้วาดส่วนติดต่อผู้ใช้ของโปรแกรม (เช่น Toolbar, Menubar) การใช้ XUL มีข้อดีคือทำให้การสร้างส่วนติดต่อผู้ใช้ง่ายขึ้นมาก เพราะจะเหมือนเขียนเว็บเพจ ถ้านึกไม่ออกลองอ่าน
<window name=”test”>
<menubar/>
<toolbar name=”primary toolbar”>
<button name=”button1″/>
<button name=”button2″/>
</toolbar>
</window>
ประมาณนี้ เหมือนเขียนเว็บป่ะ
การตกแต่งจะใช้ CSS เหมือนเว็บปกติ นอกจากสร้างง่ายแล้ว มันยังรับประกันว่าจะทำงานได้ทุกโอเอสที่ Gecko รันได้ (ซึ่งตอนนี้ก็มีมากโขอยู่ บนมือถือก็รันได้) เพราะว่าแทนที่จะยกหน้าที่วาดปุ่ม เมนูต่างๆ ให้กับ OS เจ้า Gecko จะรับผิดชอบวาดเอง ทั้งตัวโครงของหน้าต่าง (จาก XUL) และเนื้อหาในหน้าต่าง (จาก HTML)
Extension ทุกตัวก็สร้างด้วย XUL โดยใช้ JavaScript เข้าช่วย
ส่วนข้อเสียของ XUL ก็คือช้าเมื่อเทียบกับวิธีแบบเดิม และหน้าตาไม่ค่อยเหมือนกับโปรแกรมอื่นๆ ในระบบนัก ฝั่งไมโครซอฟท์มีตัว XAML ออกมาแข่ง ซึ่งแนวคิดใกล้เคียงกับ XUL
โปรแกรมของ Mozilla บางตัวเท่านั้นที่ใช้ XUL อย่าง Firefox หรือ Thunderbird นั้นใช้ Gecko+XUL แต่ Camino ซึ่งใช้ Gecko เหมือนกัน ใช้ Cocoa (ของ Mac OS X) เป็นตัววาดส่วนติดต่อแทน เช่นเดียวกับ Epiphany (เว็บเบราว์เซอร์ของ Gnome) ที่ใช้ GTK+ แทน XUL
4. XULRunner คืออะไร?
สมมติว่าลง Firefox กับ Thunderbird ซึ่งเป็นโปรแกรมที่ใช้ Gecko+XUL เหมือนกัน ในเครื่องของเราจะมี Gecko 2 ชุด ซึ่งซ้ำซ้อนเกินความจำเป็น
ในอนาคตโปรแกรมของ Mozilla จะทำงานบน XULRunner ซึ่งเป็น Gecko Runtime รวมกับ XUL พื้นฐาน เพื่อให้โปรแกรมอื่นๆ สามารถเรียกใช้ได้ ตัวอย่างโปรแกรมที่ใช้ XULRunner คือ Songbird โปรแกรมฟังเพลงคู่แข่งกับ iTunes
5. Branch กับ Trunk ต่างกันอย่างไร?
ตัวซอร์สโค้ดของโปรแกรมแต่ละตัวจะถูกเก็บไว้ในระบบ Revision Control (ในที่นี้ใช้ CVS)
แต่โปรแกรมจะมีช่วงสถานะที่แตกต่างกันออกไป เมื่อโปรแกรมใกล้จะออกเวอร์ชันใหม่ จะรับเฉพาะการเปลี่ยนแปลงขนาดเล็ก ที่เป็นการแก้บั๊กเท่านั้น พวกฟีเจอร์ใหม่ๆ จะไม่ถูกรวมเข้าไป เพราะอาจก่อให้เกิดความไม่เสถียร (บั๊กใหม่) ส่งผลให้โปรแกรมออกช้าได้
ระหว่างการแก้บั๊กกับฟีเจอร์นั้นสำคัญทั้งคู่ จะเลือกเอาอย่างใดอย่างหนึ่งก็คงไม่ได้ วิธีแก้ไขคือแตกไลน์ของโค้ดเป็นสอง (หรือมากกว่า) ถ้านึกไม่ออกลองคิดถึงแผนภาพต้นไม้ดู
โค้ดสายหลักจะเรียกว่า Trunk (ลำต้น) ส่วนนี้จะไม่ค่อยเสถียร แต่จะรับฟีเจอร์ใหม่ๆ เข้าไปรวมตลอด
โค้ดสายรองจะเรียกว่า Branch (กิ่ง) ส่วนนี้จะแยกตามเวอร์ชัน เช่น Firefox 1.0 Branch, Firefox 1.5 Branch และรับเฉพาะโค้ดที่เกี่ยวข้องกับตามแผนของเวอร์ชันนั้นๆ เท่านั้น
ทั้งสองสายจะ sync กันเป็นระยะ ไม่ต้องกังวลว่าโค้ดที่ส่งเข้า Branch จะไม่ถูกรวมใน Trunk (แต่โค้ดใน Trunk มักจะไม่เข้าใน Branch) และโค้ดประมาณครึ่งนึงจะถูกนำเข้าไปรวมทั้ง Branch และ Trunk ตั้งแต่แรกอยู่แล้ว
เมื่อสายของ Branch ออกตัวจริง (เช่น Firefox 1.5) Branch นั้นจะยังคงอยู่เพื่อออกเวอร์ชันแก้บั๊ก (เช่น 1.5.0.1) และทางทีมงานจะทำการแตกกิ่งของ Trunk ออกเป็น Branch ใหม่ (ในกรณีนี้คือ 2.0) ส่วนฟีเจอร์ที่ส่งเข้า Trunk ก็จะไปอยู่ในเวอร์ชันถัดๆ ไป (เช่น 3.0) ถ้างงดูรูปประกอบ
ทั้ง Branch และ Trunk เค้าจะ build (ศัพท์หรู แปลว่า คอมไพล์) กันทุก ชม. (hourly ครับ อ่านไม่ผิด) แต่แนะนำให้โหลดแบบรายวัน (nightly) มาลองเล่นจะดีกว่าถ้าอยากเล่น
ดังนั้นคำถามที่ว่าควรดาวน์โหลดตัวไหน ก็ขึ้นกับการใช้งาน ถ้าอยากลองของใหม่จัดๆ ก็โหลด Trunk แต่ถ้าเอาเสถียรขึ้นมาหน่อยก็ Branch
มีโอกาสสูงที่ Trunk หรือ Branch ช่วงนั้นจะเจ๊งพอดี ถ้าไม่อยากโหลดฟรี ควรอ่านรายการเปลี่ยนแปลงแบบวันต่อวันได้ใน Forum ของ MozillaZine (สำหรับ Firefox) หรือ The Burning Edge ที่ละเอียดกว่าแต่ไม่อัพเดตเท่า
หมายเหตุ: สำหรับ Thunderbird อ่าน The Rumbling Edge
6. แหล่งข้อมูลเพิ่มเติม
- เน้นดีเทล อ่าน Mozilla Wiki
- เน้นสด อ่าน บล็อกของทีมพัฒนา Mozilla
- เน้นดิบ อ่าน forum ของ MozillaZine
เดี๋ยวคราวหน้าจะมาสอนวิธีหาบั๊กและรายงานบั๊กใน Bugzilla เน่อ พ่อแม่พี่น้องที่เคารพ
มี 8 ความเห็นที่ 'FAQ: การพัฒนาใน Mozilla'
Leave a Reply
ผู้สนับสนุน
ค้นหา
ล่าสุด
หมวด
- การใช้งานทั่วไป (28)
- ข่าวคราว (94)
- เส้นทาง Firefox3 (20)
- หมาเน่า (11)
- เสริมหลักสูตร (23)
- Extension แนะนำ (68)
- Theme แนะแนว (7)
- Bookmarklet (2)
- Spread Firefox (12)
- ขำขำ (21)
- นอกเรื่อง (29)





โหชอบมาก เอาอีกครับ เพราะอยากรู้มานานแล้วเหมือนกัน :D ขอบคุณคร๊าบบบบ คุงคู :D
สุดยอดครับ :)
ขอบคุณมากๆเลยนะครับ
ดีครับ อ่านแล้วได้ความรู้เพิ่มอีกหลายอย่าง
เคยเห็น Branch กับ Trunk ในโปรแกรมอื่นด้วยเหมือนกัน
อ่านแล้วเข้าใจระบบการพัฒนาเลย (^o^)
เยี่ยมครับ
โฮ้ว เย่.. แจ่มแจ้งเลย
โอย.. ตาลาย
้เพิ่งเข้ามาอ่านครั้งแรกครับ ดีมากเลยครับ ขอบคุณนะครับ อุตสาห์เขียนให้อ่านกัน