12 คะแนน โดย GN⁺ 2025-10-30 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • 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 ความคิดเห็น

 
GN⁺ 2025-10-30
ความคิดเห็นจาก Hacker News
  • น่าทึ่งที่แม้ Minecraft จะเป็นเกมที่มี ชุมชนม็อดที่แข็งแกร่ง มากขนาดนี้ แต่นักพัฒนากลับต้องทำงานโดยการดีคอมไพล์ Java ไบนารีที่ถูก obfuscate
    ความ ทุ่มเท ของพวกเขาที่พัฒนาเครื่องมือผ่านการ deobfuscate และ reobfuscate ซ้ำไปซ้ำมานานกว่าสิบปีนั้นยอดเยี่ยมมาก

    • ตอนปี 2004 เคยเล่นเกม MMO บน เซิร์ฟเวอร์เถื่อน แล้วผู้ดูแลเซิร์ฟเวอร์ก็เพิ่มฟีเจอร์ด้วยการแก้ไบนารีโดยตรงผ่าน hex editor
      ภาพที่เขาจ้องเลขฐานสิบหกแล้วแก้ทีละตัวเหมือนแฮ็กเกอร์ในหนัง Matrix น่าประทับใจมาก
    • นี่เป็นอีกหลักฐานว่าคุณสามารถแก้ไขซอฟต์แวร์ได้แม้ไม่มีซอร์สโค้ด
      แต่ Java เดิมทีก็ดีคอมไพล์ได้ง่ายอยู่แล้ว ดังนั้นอุปสรรคที่แท้จริงจึงไม่ใช่ ความซับซ้อนของโครงสร้างเชิงวัตถุ มากกว่าโค้ดที่ถูก obfuscate
    • จริง ๆ แล้วตั้งแต่ปี 2019 Mojang ก็เริ่มแจก ไฟล์แมปปิง อย่างเป็นทางการแล้ว
      ไม่ต้องให้ชุมชนสร้างใช้กันเองเหมือนเมื่อก่อน
    • Java ดีคอมไพล์ง่ายมาก แค่เข้าใจ JVM bytecode ก็แก้ได้เร็ว
      ขอเพียงรู้โครงสร้าง VM และแนวคิดเรื่อง object dispatch ก็พอ
      ชุมชนม็อด Minecraft ยุคแรกเป็นที่ที่สนุกมาก และเป็นหนึ่งในประสบการณ์การเขียนโค้ดที่น่าจดจำที่สุดที่เคยมี
    • ฉันเองก็ไม่คุ้นกับ Minecraft มากนัก เลยคิดว่ามันคงมีระบบปลั๊กอินทางการอยู่แล้ว
      แต่พอรู้ว่าระบบนิเวศส่วนใหญ่ถูกสร้างจาก วิศวกรรมย้อนกลับ ก็รู้สึกทึ่งมาก
  • เกมอย่าง Minecraft, Roblox, Geometry Dash และ Trackmania เป็นตัวอย่างความสำเร็จจาก พลังของชุมชน
    ถ้าเอนจินปิดเกินไปหรือพัฒนายาก ก็จะโตได้ยากเหมือน Vision Pro หรือ metaverse
    ต้องเปิดให้ทั้งนักพัฒนาสายงานอดิเรกและผู้ใช้กลุ่มเล็ก ๆ เข้าร่วมได้ง่าย ชุมชนถึงจะเกิด

    • ซีรีส์ Flight Simulator ก็สร้าง ระบบนิเวศแอดออน ขนาดใหญ่ขึ้นมาได้
      แต่ท้ายที่สุดสิ่งสำคัญก็คือตัวเกมต้อง ‘ดี’ ก่อน
      พอชุมชนใหญ่ขึ้น ก็จะมีบางส่วนเริ่มทำม็อดเองตามธรรมชาติ
      อย่าง Richard Burns Rally เดิมก็ไม่ได้ออกแบบมาเพื่อม็อด แต่แฟน ๆ ก็เพิ่มทั้งรถ สนามแข่ง และฟังก์ชันออนไลน์เข้าไป
      ปรากฏการณ์คล้ายกันนี้ก็เกิดใน voxel engine Luanti เช่นกัน
    • ความสมบูรณ์ของเอนจิน Roblox ในยุคแรกนั้นยอดเยี่ยมจริง ๆ
      ในปี 2006 คุณสามารถเปิดเล่นเกม 3D แบบผู้เล่นหลายคนฟรีได้ทันทีนับพันเกม และยังทำลายสิ่งปลูกสร้างหรือเปลี่ยนภูมิประเทศได้ด้วย
      มันล้ำมากสำหรับยุคนั้น และความเข้าถึงง่ายแบบเรียบง่ายนี่เองที่ทำให้สุดท้ายครองตลาดเด็กได้
    • ฉันคิดว่า Minecraft เป็นข้อยกเว้น
      ตั้งแต่เวอร์ชันอัลฟา ประสบการณ์เล่นคนเดียว ก็ยอดเยี่ยมแล้ว และสมดุลระหว่างการเอาตัวรอดกับความสร้างสรรค์ก็ลงตัวสมบูรณ์
      ตอนนั้นมันก็ทำรายได้ระดับหลายล้านดอลลาร์แล้ว
    • อีกเหตุผลที่ metaverse ล้มเหลว ก็คือไม่มีใครต้องการมัน
      แทบไม่มีใครอยากใส่ ชุดหูฟัง VR ราคาแพง
    • ไม่เห็นด้วยกับคำกล่าวที่ว่าเอนจิน VR ไม่ดี
      Unity, Unreal และ Godot ต่างก็รองรับ VR ได้ดี
      ปัญหาคือ จำนวนผู้ใช้น้อยเมื่อเทียบกับต้นทุนพัฒนา
      มีเรื่องต้องคำนึงมากมาย เช่น การเข้าถึง UX และการป้องกันอาการเมา ทำให้ต้นทุนพัฒนาสูงกว่ามาก
      ตัวอย่างเช่น แค่การแสดงซับไตเติลในสภาพแวดล้อม 6DoF ก็ยังยากเลย
  • obfuscation mappings ที่ Mojang เปิดในปี 2019 เป็นรายการที่ใช้คลายชื่อที่ถูก obfuscate
    ทำให้คนทำม็อดไม่ต้องเดาโค้ดทั้งหมดอีกต่อไป แต่ก็ยังสงสัยว่าทำไมถึงเปิดแค่ครึ่งเดียว

    • เพราะเครื่องมือทำม็อดจำนวนมากได้ผูกกับ ระบบการตั้งชื่อของชุมชน ไปแล้ว
    • ฝ่ายกฎหมายคงได้ยินคำว่า deobfuscation แล้วคงสติแตกไปเลยมั้ง
    • อาจเป็นแค่เหตุผลด้านกฎหมายหรือ ความสะดวกของกระบวนการ ก็ได้
    • หรือบางทีแมปปิงอาจอยู่ในรูปแบบ API ทางการ ที่ครอบคลุมเพียงบางคลาสหรือบางเมธอดก็ได้
  • สงสัยว่า someday Minecraft Java Edition จะ เปิดซอร์สบน GitHub ไหม
    มันน่าจะยังขายได้ต่อบนทุกแพลตฟอร์มเหมือน Skyrim

    • มี ตัว launcher โอเพนซอร์ส อยู่แล้ว และถ้าระวังเรื่องการยืนยันบัญชี ก็ใช้งานได้ตามปกติ
      ไฟล์เกมเองก็โหลดฟรีจากเซิร์ฟเวอร์ของ Microsoft ได้ด้วย ดังนั้นถึงจะโอเพนซอร์สก็คงไม่ได้เสียหายอะไร
    • ตอนปี 2010 Notch เคยสัญญาว่า “ถ้ายอดขายลดลงจะเปิดซอร์สโค้ด”
      เว็บเพจที่เก็บใน archive ตอนนั้น
    • การ เปิดโอเพนซอร์สเฉพาะเอนจิน แบบ Doom ก็เป็นวิธีที่ดี
      แอสเซ็ตเชิงศิลป์ยังคงได้รับการคุ้มครองลิขสิทธิ์
    • ทางเลือกคล้ายกันก็มี Minetest หรือ Luanti
    • ถ้าเป็นตอนนี้ ต่อให้เปิดซอร์ส แต่ยังเก็บเงินเฉพาะ สิทธิ์เข้าถึงเซิร์ฟเวอร์ยืนยันบัญชี ก็คงไม่กระทบรายได้มากนัก
  • ช่วงนี้ฉันชอบทำงานบน Luanti มากกว่า
    คุณสามารถทำประสบการณ์แทบเหมือน Minecraft ผ่านม็อดได้ และยังมีเกมม็อดอย่าง VoxeLibre ด้วย
    ซอร์สโค้ดของม็อดที่เขียนด้วย Lua ก็เปิดเผยเกือบทั้งหมด
    โดยเฉพาะ Zoonami ที่มอบประสบการณ์คล้าย Pokémon ก็น่าสนใจมาก

    • สงสัยว่า Luanti มี ม็อดแพ็กขนาดใหญ่ แบบ AllTheMods 10 หรือ Meatballcraft ด้วยไหม
    • Zoonami ดูเหมือนจะทำสำเร็จในสิ่งที่ Tuxemon ทำไม่สำเร็จ
  • Minecraft นั้น ละเมิดลิขสิทธิ์ได้ง่าย อยู่แล้ว ดังนั้นความเสียหายจากการเปิดซอร์สน่าจะมีน้อยมาก
    คนส่วนใหญ่ยังคงถือบัญชีแท้เพื่อใช้เซิร์ฟเวอร์ยืนยันตัวตนของ Mojang
    มันใหญ่พอเสียจนถึงขั้นสามารถ เปิดซอร์ส พร้อมเงื่อนไขไม่แสวงหากำไรได้ด้วยซ้ำ

    • แต่ถ้ามี “ข้อห้ามใช้เชิงพาณิชย์” ก็จะไม่ใช่โอเพนซอร์สจริง ๆ แต่จัดเป็น Source Available แทน
  • การ obfuscate แบบดุดัน ของ Proguard ทำให้ชื่อคลาสซับซ้อนและยังมีการ inline อีกด้วย จนโค้ดเข้าใจยากมาก
    มาตรการครั้งนี้จึงถือเป็นความก้าวหน้าครั้งใหญ่

  • ข่าวดี! มี ความเป็นไปได้ใหม่ ๆ เปิดขึ้นสำหรับชุมชนม็อด Minecraft

  • แมปปิงที่ชุมชนสร้างนั้นเป็นไลเซนส์เสรี แต่แมปปิงของ Microsoft ไม่ใช่
    มันอาจเป็น กับดัก รูปแบบหนึ่งก็ได้

    • แต่ตอนนี้แมปปิงเองก็หายไปแล้ว เลยไม่แน่ใจว่ากับดักนั้นคืออะไร
    • สงสัยว่าชื่อของตัวแปรเองก็มี ลิขสิทธิ์ ด้วยหรือเปล่า
  • ถ้าอยากทำให้มันง่ายขึ้นจริง ๆ วิธีที่ดีที่สุดคงเป็นการเปิดซอร์สโค้ดภายใต้ ไลเซนส์ที่อนุญาตให้ม็อดได้