- Mojang ประกาศว่าจะ ยกเลิกการทำโค้ดของ Minecraft: Java Edition ให้สับสนทั้งหมด
- การทำโค้ดให้สับสนเป็นแนวปฏิบัติด้านความปลอดภัยที่พบได้ทั่วไปในอุตสาหกรรมเกม แต่ก็เป็นข้อจำกัดต่อการเข้าถึงโค้ดและการพัฒนา ม็อด (mod)
- ก่อนหน้านี้ชื่อคลาส ฟังก์ชัน และตัวแปรทั้งหมดถูกทำให้สับสน จนทำให้ การพัฒนาม็อดและการดีบักซับซ้อน แต่ตอนนี้จะมีการแจกจ่าย บิลด์ที่มีชื่อโค้ดต้นฉบับรวมอยู่ด้วย
- ตั้งแต่ สแนปช็อตแรกหลังอัปเดต Mounts of Mayhem เป็นต้นไป การทำโค้ดให้สับสนจะหายไป และเพื่อความเข้ากันได้กับเครื่องมือเดิม จะมีการ แจกจ่ายเวอร์ชันแบบทำให้สับสนและไม่ทำให้สับสนควบคู่กัน อยู่ช่วงหนึ่ง
- คาดว่าการเปลี่ยนแปลงครั้งนี้จะทำให้ การพัฒนาม็อด การวิเคราะห์โค้ด การตีความ crash log และการแก้บั๊ก ง่ายขึ้นอย่างมาก
ประวัติของการทำโค้ดให้สับสนใน Minecraft
- Java Edition ใช้ การทำโค้ดให้สับสนเพื่อปกป้องซอร์สโค้ด มาตั้งแต่ช่วงแรกของการเปิดตัว
- ชื่อคลาส ฟังก์ชัน และตัวแปรภายในโค้ดถูก แปลงเป็นสตริงที่ไม่มีความหมายโดยเจตนา และไม่ถูกเปิดเผยต่อสาธารณะ
- ส่งผลให้ผู้พัฒนาม็อดต้องวิเคราะห์หน้าที่ของแต่ละส่วนในโค้ดด้วยตนเอง
- ตั้งแต่ปี 2019 Mojang ได้ผ่อนคลายเรื่องนี้ด้วยการเผยแพร่ ไฟล์ obfuscation mappings
- เป็นรายการแมปปิงที่เชื่อมชื่อที่ถูกทำให้สับสนเข้ากับชื่อเดิมที่มีความหมาย
- ทำให้ผู้พัฒนาม็อดเข้าใจโครงสร้างโค้ดได้ง่ายขึ้น แต่ก็ยังคงมีขั้นตอนคั่นกลางอยู่
การตัดสินใจยกเลิกการทำให้โค้ดสับสน
- Mojang ตัดสินใจ ยกเลิกการทำโค้ดให้สับสนโดยตรง เพื่อเอาขั้นตอนคั่นกลางออกทั้งหมด
- จะเริ่มใช้ตั้งแต่สแนปช็อตแรกหลังการเปิดตัวเต็มของ “Mounts of Mayhem”
- ในทุกเวอร์ชันหลังจากนี้ จะมีการให้ โค้ดที่คงชื่อเดิมของตัวแปร ฟิลด์ และคลาสไว้ เป็นค่าเริ่มต้น
- นักพัฒนาและผู้พัฒนาม็อดจะสามารถ เข้าถึงและแก้ไขโค้ดได้โดยตรง
- มาตรการนี้ถูกมองว่าเป็นการเพิ่มความเปิดกว้างให้กับ Java Edition และ ลดอุปสรรคของระบบนิเวศม็อด
ช่วงเปลี่ยนผ่านสำหรับผู้พัฒนาม็อด
- Mojang ได้เตรียมช่วงเปลี่ยนผ่านโดยคำนึงถึง ปัญหาความเข้ากันได้ของเครื่องมือเดิม
- ตั้งแต่สแนปช็อตถัดไป จะมีการแจกจ่าย experimental release แบบไม่ทำให้โค้ดสับสน ควบคู่กันไป
- ผู้พัฒนาม็อดสามารถ ทดสอบเครื่องมือและเวิร์กโฟลว์ล่วงหน้า ให้สอดคล้องกับโครงสร้างโค้ดใหม่ได้
- หลังเปลี่ยนผ่านเต็มรูปแบบ เวอร์ชันเดิมที่ยังทำให้โค้ดสับสนจะถูกยุติ
- เวอร์ชันแรกที่ไม่ทำให้โค้ดสับสนอย่างสมบูรณ์คือ สแนปช็อตแรกหลังการเปิดตัว Mounts of Mayhem
เป้าหมายของการเปลี่ยนแปลง
- Mojang ระบุว่า “การทำม็อดคือหัวใจสำคัญของ Java Edition” และอธิบายว่าการทำโค้ดให้สับสนเป็นสิ่งที่ขัดขวางการเติบโตของมัน
- จะสามารถ สร้าง อัปเดต และดีบักม็อด ได้รวดเร็วยิ่งขึ้นโดยไม่ต้องเสียเวลาแกะโค้ดที่ซับซ้อน
- crash log อ่านง่ายขึ้น ทำให้แก้ปัญหาได้เร็วขึ้น
- คาดว่าการทำงานร่วมกันและการเรียนรู้ระหว่างผู้พัฒนาม็อดจะง่ายขึ้นด้วย
ใบอนุญาตและแนวทางทางกฎหมาย
- การเปลี่ยนแปลงครั้งนี้ ไม่ส่งผลต่อ EULA หรือ Usage Guidelines
- ผู้สร้าง Minecraft และผู้พัฒนาม็อดยังคงต้องปฏิบัติตามข้อกำหนดดังกล่าว
- ในแต่ละไฟล์ jar จะมีไฟล์ LICENSE ที่ลิงก์ตรงไปยัง EULA รวมอยู่
- การเปลี่ยนแปลงต่อจากนี้:
- ลบ ข้อมูล obfuscation mappings ออกจากไฟล์เวอร์ชัน
.json
- ให้บริการ ไฟล์ jar ทั้งฝั่งไคลเอนต์และเซิร์ฟเวอร์ในสถานะไม่ทำให้โค้ดสับสน
- เพิ่ม ไฟล์ LICENSE ใหม่ ในแต่ละ jar
ทิศทางในอนาคต
- Mojang อธิบายว่านี่คือ “การเปลี่ยนผ่านสู่อนาคตที่โปร่งใส” และมีแผนจะรับฟังความคิดเห็นจากชุมชนอย่างจริงจัง
- การยกเลิกการทำให้โค้ดสับสนถือเป็น การเปลี่ยนแปลงสภาพแวดล้อมการพัฒนาที่เปิดกว้างที่สุดครั้งหนึ่งในประวัติศาสตร์ของ Minecraft Java Edition และคาดว่าจะช่วย เร่งการเติบโตของระบบนิเวศม็อดและขยายคุณค่าด้านการเรียนรู้
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
น่าทึ่งที่แม้ Minecraft จะเป็นเกมที่มี ชุมชนม็อดที่แข็งแกร่ง มากขนาดนี้ แต่นักพัฒนากลับต้องทำงานโดยการดีคอมไพล์ Java ไบนารีที่ถูก obfuscate
ความ ทุ่มเท ของพวกเขาที่พัฒนาเครื่องมือผ่านการ deobfuscate และ reobfuscate ซ้ำไปซ้ำมานานกว่าสิบปีนั้นยอดเยี่ยมมาก
ภาพที่เขาจ้องเลขฐานสิบหกแล้วแก้ทีละตัวเหมือนแฮ็กเกอร์ในหนัง Matrix น่าประทับใจมาก
แต่ Java เดิมทีก็ดีคอมไพล์ได้ง่ายอยู่แล้ว ดังนั้นอุปสรรคที่แท้จริงจึงไม่ใช่ ความซับซ้อนของโครงสร้างเชิงวัตถุ มากกว่าโค้ดที่ถูก obfuscate
ไม่ต้องให้ชุมชนสร้างใช้กันเองเหมือนเมื่อก่อน
ขอเพียงรู้โครงสร้าง VM และแนวคิดเรื่อง object dispatch ก็พอ
ชุมชนม็อด Minecraft ยุคแรกเป็นที่ที่สนุกมาก และเป็นหนึ่งในประสบการณ์การเขียนโค้ดที่น่าจดจำที่สุดที่เคยมี
แต่พอรู้ว่าระบบนิเวศส่วนใหญ่ถูกสร้างจาก วิศวกรรมย้อนกลับ ก็รู้สึกทึ่งมาก
เกมอย่าง Minecraft, Roblox, Geometry Dash และ Trackmania เป็นตัวอย่างความสำเร็จจาก พลังของชุมชน
ถ้าเอนจินปิดเกินไปหรือพัฒนายาก ก็จะโตได้ยากเหมือน Vision Pro หรือ metaverse
ต้องเปิดให้ทั้งนักพัฒนาสายงานอดิเรกและผู้ใช้กลุ่มเล็ก ๆ เข้าร่วมได้ง่าย ชุมชนถึงจะเกิด
แต่ท้ายที่สุดสิ่งสำคัญก็คือตัวเกมต้อง ‘ดี’ ก่อน
พอชุมชนใหญ่ขึ้น ก็จะมีบางส่วนเริ่มทำม็อดเองตามธรรมชาติ
อย่าง Richard Burns Rally เดิมก็ไม่ได้ออกแบบมาเพื่อม็อด แต่แฟน ๆ ก็เพิ่มทั้งรถ สนามแข่ง และฟังก์ชันออนไลน์เข้าไป
ปรากฏการณ์คล้ายกันนี้ก็เกิดใน voxel engine Luanti เช่นกัน
ในปี 2006 คุณสามารถเปิดเล่นเกม 3D แบบผู้เล่นหลายคนฟรีได้ทันทีนับพันเกม และยังทำลายสิ่งปลูกสร้างหรือเปลี่ยนภูมิประเทศได้ด้วย
มันล้ำมากสำหรับยุคนั้น และความเข้าถึงง่ายแบบเรียบง่ายนี่เองที่ทำให้สุดท้ายครองตลาดเด็กได้
ตั้งแต่เวอร์ชันอัลฟา ประสบการณ์เล่นคนเดียว ก็ยอดเยี่ยมแล้ว และสมดุลระหว่างการเอาตัวรอดกับความสร้างสรรค์ก็ลงตัวสมบูรณ์
ตอนนั้นมันก็ทำรายได้ระดับหลายล้านดอลลาร์แล้ว
แทบไม่มีใครอยากใส่ ชุดหูฟัง VR ราคาแพง
Unity, Unreal และ Godot ต่างก็รองรับ VR ได้ดี
ปัญหาคือ จำนวนผู้ใช้น้อยเมื่อเทียบกับต้นทุนพัฒนา
มีเรื่องต้องคำนึงมากมาย เช่น การเข้าถึง UX และการป้องกันอาการเมา ทำให้ต้นทุนพัฒนาสูงกว่ามาก
ตัวอย่างเช่น แค่การแสดงซับไตเติลในสภาพแวดล้อม 6DoF ก็ยังยากเลย
obfuscation mappings ที่ Mojang เปิดในปี 2019 เป็นรายการที่ใช้คลายชื่อที่ถูก obfuscate
ทำให้คนทำม็อดไม่ต้องเดาโค้ดทั้งหมดอีกต่อไป แต่ก็ยังสงสัยว่าทำไมถึงเปิดแค่ครึ่งเดียว
สงสัยว่า someday Minecraft Java Edition จะ เปิดซอร์สบน GitHub ไหม
มันน่าจะยังขายได้ต่อบนทุกแพลตฟอร์มเหมือน Skyrim
ไฟล์เกมเองก็โหลดฟรีจากเซิร์ฟเวอร์ของ Microsoft ได้ด้วย ดังนั้นถึงจะโอเพนซอร์สก็คงไม่ได้เสียหายอะไร
เว็บเพจที่เก็บใน archive ตอนนั้น
แอสเซ็ตเชิงศิลป์ยังคงได้รับการคุ้มครองลิขสิทธิ์
ช่วงนี้ฉันชอบทำงานบน Luanti มากกว่า
คุณสามารถทำประสบการณ์แทบเหมือน Minecraft ผ่านม็อดได้ และยังมีเกมม็อดอย่าง VoxeLibre ด้วย
ซอร์สโค้ดของม็อดที่เขียนด้วย Lua ก็เปิดเผยเกือบทั้งหมด
โดยเฉพาะ Zoonami ที่มอบประสบการณ์คล้าย Pokémon ก็น่าสนใจมาก
Minecraft นั้น ละเมิดลิขสิทธิ์ได้ง่าย อยู่แล้ว ดังนั้นความเสียหายจากการเปิดซอร์สน่าจะมีน้อยมาก
คนส่วนใหญ่ยังคงถือบัญชีแท้เพื่อใช้เซิร์ฟเวอร์ยืนยันตัวตนของ Mojang
มันใหญ่พอเสียจนถึงขั้นสามารถ เปิดซอร์ส พร้อมเงื่อนไขไม่แสวงหากำไรได้ด้วยซ้ำ
การ obfuscate แบบดุดัน ของ Proguard ทำให้ชื่อคลาสซับซ้อนและยังมีการ inline อีกด้วย จนโค้ดเข้าใจยากมาก
มาตรการครั้งนี้จึงถือเป็นความก้าวหน้าครั้งใหญ่
ข่าวดี! มี ความเป็นไปได้ใหม่ ๆ เปิดขึ้นสำหรับชุมชนม็อด Minecraft
แมปปิงที่ชุมชนสร้างนั้นเป็นไลเซนส์เสรี แต่แมปปิงของ Microsoft ไม่ใช่
มันอาจเป็น กับดัก รูปแบบหนึ่งก็ได้
ถ้าอยากทำให้มันง่ายขึ้นจริง ๆ วิธีที่ดีที่สุดคงเป็นการเปิดซอร์สโค้ดภายใต้ ไลเซนส์ที่อนุญาตให้ม็อดได้