12 điểm bởi GN⁺ 2025-10-30 | 1 bình luận | Chia sẻ qua WhatsApp
  • Mojang đã công bố loại bỏ hoàn toàn cơ chế làm rối mã trong Minecraft: Java Edition
  • Làm rối mã vốn là một biện pháp bảo mật phổ biến trong ngành game, nhưng lại hạn chế khả năng tiếp cận mã nguồn và phát triển mod
  • Trước đây tên lớp, hàm và biến đều bị làm rối, khiến việc phát triển mod và gỡ lỗi trở nên phức tạp; nay Mojang sẽ cung cấp các bản build kèm tên mã gốc
  • Từ snapshot đầu tiên sau bản cập nhật Mounts of Mayhem, cơ chế làm rối sẽ biến mất; trong một thời gian, Mojang sẽ phát hành song song bản làm rối và không làm rối để đảm bảo tương thích với các công cụ hiện có
  • Thay đổi này được kỳ vọng sẽ giúp phát triển mod, phân tích mã, đọc log crash và sửa lỗi dễ dàng hơn đáng kể

Lịch sử làm rối mã của Minecraft

  • Java Edition đã sử dụng làm rối mã để bảo vệ mã nguồn từ những ngày đầu phát hành
    • Tên lớp, hàm và biến bên trong mã đã bị cố ý chuyển thành các chuỗi vô nghĩa và không được công khai
    • Vì vậy, các modder phải tự phân tích thủ công vai trò của từng phần mã
  • Từ năm 2019, Mojang đã công bố các tệp ánh xạ làm rối (obfuscation mappings) để giảm bớt trở ngại này
    • Cung cấp danh sách ánh xạ nối tên đã bị làm rối với tên gốc có ý nghĩa
    • Nhờ đó, modder dễ hiểu cấu trúc mã hơn, nhưng vẫn còn một bước trung gian

Quyết định loại bỏ làm rối mã

  • Mojang đã quyết định loại bỏ chính cơ chế làm rối mã để xóa bỏ hoàn toàn bước trung gian
    • Áp dụng từ snapshot đầu tiên sau khi “Mounts of Mayhem” phát hành đầy đủ
    • Trong mọi phiên bản về sau, mã với tên biến, tên trường và tên lớp gốc sẽ được cung cấp mặc định
    • Nhà phát triển và modder sẽ có thể truy cập và chỉnh sửa mã trực tiếp
  • Đây được xem là động thái nâng cao tính mở của Java Edition và hạ thấp rào cản cho hệ sinh thái mod

Giai đoạn chuyển đổi cho modder

  • Mojang đã chuẩn bị giai đoạn chuyển tiếp có tính đến vấn đề tương thích với các công cụ hiện có
    • Từ snapshot tiếp theo sẽ phát hành kèm bản không làm rối thử nghiệm (experimental release)
    • Modder có thể kiểm thử trước công cụ và quy trình làm việc để phù hợp với cấu trúc mã mới
    • Sau khi chuyển đổi hoàn toàn, phiên bản làm rối cũ sẽ bị ngừng cung cấp
  • Phiên bản hoàn toàn không làm rối đầu tiên sẽ là snapshot đầu tiên sau khi Mounts of Mayhem phát hành

Mục đích của thay đổi

  • Mojang cho biết “modding là cốt lõi của Java Edition”, và cơ chế làm rối đã cản trở sự phát triển đó
    • Có thể tạo, cập nhật và gỡ lỗi mod nhanh hơn mà không cần giải mã cấu trúc mã phức tạp
    • Khả năng đọc log crash được cải thiện cũng sẽ giúp tăng tốc xử lý sự cố
    • Quá trình hợp tác và học hỏi giữa các modder cũng được kỳ vọng sẽ đơn giản hơn

Giấy phép và hướng dẫn pháp lý

  • Thay đổi lần này không ảnh hưởng đến EULA hay Usage Guidelines
    • Người tạo Minecraft và mod vẫn phải tuân thủ các quy định liên quan
    • Mỗi tệp jar sẽ bao gồm một tệp LICENSE liên kết trực tiếp đến EULA
  • Các thay đổi sắp tới:
    • Xóa thông tin ánh xạ làm rối khỏi tệp .json của phiên bản
    • Cả tệp jar client/server đều được cung cấp ở trạng thái không làm rối
    • Mỗi jar sẽ có tệp LICENSE mới

Hướng đi tiếp theo

  • Mojang gọi đây là “bước chuyển sang một tương lai minh bạch” và dự kiến sẽ tích cực thu thập phản hồi từ cộng đồng
  • Việc gỡ bỏ làm rối mã là thay đổi môi trường phát triển cởi mở nhất trong lịch sử Minecraft Java Edition,
    và được kỳ vọng sẽ thúc đẩy tăng trưởng hệ sinh thái mod cũng như mở rộng giá trị giáo dục

1 bình luận

 
GN⁺ 2025-10-30
Ý kiến trên Hacker News
  • Thật ngạc nhiên khi Minecraft là một trò chơi có cộng đồng mod cực kỳ mạnh, vậy mà các nhà phát triển lại phải dịch ngược các binary Java đã bị làm rối để làm việc
    Sự tận tâm của họ thật đáng nể khi đã phát triển cả một hệ thống công cụ bằng cách lặp đi lặp lại quá trình gỡ rối và làm rối lại suốt hơn 10 năm

    • Năm 2004 tôi từng chơi một game MMO trên máy chủ lậu, và người vận hành máy chủ đã tự thêm tính năng bằng cách chỉnh sửa binary trực tiếp bằng hex editor
      Hình ảnh họ nhìn các ký tự thập lục phân rồi thay từng ký tự một giống hệt hacker trong phim Matrix thật sự rất ấn tượng
    • Đây là thêm một bằng chứng nữa cho thấy có thể sửa đổi phần mềm ngay cả khi không có mã nguồn
      Tuy vậy, Java vốn dĩ dễ dịch ngược, nên rào cản thực sự không phải là làm rối mã mà là độ phức tạp của cấu trúc hướng đối tượng
    • Thực ra từ năm 2019 Mojang đã bắt đầu cung cấp chính thức các tệp ánh xạ
      Không còn cần cộng đồng phải tự tạo và dùng như trước nữa
    • Java dễ dịch ngược nên chỉ cần hiểu mã JVM là có thể nhanh chóng can thiệp
      Chỉ cần nắm được cấu trúc VM và khái niệm object dispatch là đủ
      Cộng đồng mod Minecraft thời kỳ đầu thực sự là một nơi rất vui, và đó là một trong những kỷ niệm lập trình đáng nhớ nhất của tôi
    • Tôi cũng không quen với Minecraft nên cứ tưởng nó có hệ thống plugin chính thức
      Nhưng hóa ra đây lại là một hệ sinh thái được xây dựng chủ yếu bằng reverse engineering, điều đó thật đáng ngạc nhiên
  • Những trò chơi như Minecraft, Roblox, Geometry Dash và Trackmania là các ví dụ thành công nhờ sức mạnh cộng đồng
    Nếu engine đóng hoặc quá khó phát triển thì sẽ khó tăng trưởng như Vision Pro hay metaverse
    Muốn hình thành cộng đồng thì phải để các nhà phát triển nghiệp dư và nhóm người dùng nhỏ có thể tham gia dễ dàng

    • Series Flight Simulator cũng đã tạo ra một hệ sinh thái add-on khổng lồ
      Nhưng rốt cuộc điều quan trọng vẫn là bản thân trò chơi phải ‘hay’
      Khi cộng đồng đủ lớn, một phần trong số đó sẽ tự nhiên bắt đầu modding
      Ví dụ, Richard Burns Rally ban đầu không được thiết kế cho modding, nhưng fan đã thêm xe, đường đua, thậm chí cả tính năng trực tuyến
      Hiện tượng tương tự cũng xuất hiện ở engine voxel Luanti
    • Mức độ hoàn thiện engine của Roblox thời kỳ đầu thực sự rất xuất sắc
      Năm 2006, người dùng đã có thể chạy ngay hàng nghìn game 3D nhiều người chơi miễn phí, đồng thời còn có thể phá hủy công trình và biến dạng địa hình
      Vào thời điểm đó đây là điều mang tính đột phá, và chính sự dễ tiếp cận đơn giản ấy cuối cùng đã giúp nó thống trị thị trường trẻ em
    • Tôi nghĩ Minecraft là một ngoại lệ
      Ngay từ bản alpha, trải nghiệm chơi đơn đã rất tuyệt vời, và sự cân bằng giữa sinh tồn với sáng tạo là hoàn hảo
      Ngay từ thời đó nó đã tạo ra doanh thu hàng triệu đô
    • Một lý do khác khiến metaverse thất bại là vì chẳng ai thật sự muốn nó
      Hầu như không có ai muốn đeo kính VR đắt đỏ
    • Tôi không đồng ý với quan điểm cho rằng engine VR là tệ
      Unity, Unreal và Godot đều hỗ trợ VR rất tốt
      Vấn đề là chi phí phát triển cao so với số lượng người dùng ít
      Cần cân nhắc rất nhiều thứ như khả năng tiếp cận, UX, chống say chuyển động nên việc phát triển đắt hơn hẳn
      Ví dụ, chỉ riêng việc hiển thị phụ đề trong môi trường 6DoF cũng đã khó rồi
  • Obfuscation mappings mà Mojang công bố năm 2019 là danh sách dùng để giải nghĩa các tên đã bị làm rối
    Nhờ đó modder không còn phải đoán toàn bộ mã nữa, nhưng vẫn khó hiểu tại sao họ chỉ công bố một nửa

    • Vì nhiều công cụ mod đã được xây dựng xoay quanh hệ thống tên gọi của cộng đồng
    • Có lẽ đội pháp lý nghe đến từ gỡ rối mã là đã hoảng rồi
    • Cũng có thể đơn giản là vì lý do pháp lý hoặc sự tiện lợi về quy trình
    • Cũng tự hỏi liệu các mapping đó có phải là một API chính thức chỉ bao gồm một số lớp hoặc phương thức nhất định hay không
  • Tôi tự hỏi liệu một ngày nào đó Minecraft Java Edition có được mã nguồn mở trên GitHub hay không
    Có vẻ nó sẽ tiếp tục bán được trên mọi nền tảng giống như Skyrim

    • Các launcher mã nguồn mở đã hoạt động bình thường từ lâu miễn là cẩn thận với phần xác thực tài khoản
      Tệp game cũng có thể tải miễn phí từ máy chủ của Microsoft, nên có vẻ việc mã nguồn mở cũng không gây thiệt hại gì lớn
    • Năm 2010 Notch từng hứa rằng “nếu doanh số giảm, tôi sẽ công khai mã nguồn”
      Bản lưu trang web thời điểm đó
    • Giống như Doom, chỉ mã nguồn mở phần engine cũng là một cách hay
      Các tài sản nghệ thuật vẫn được bảo hộ bản quyền
    • Một phương án thay thế tương tự là Minetest hoặc Luanti
    • Nếu là bây giờ, có lẽ họ có thể công khai mã nguồn và chỉ giữ quyền truy cập máy chủ xác thực tài khoản ở dạng trả phí mà doanh thu vẫn không bị ảnh hưởng nhiều
  • Dạo này tôi thích làm việc với Luanti hơn
    Có thể tái tạo gần như cùng trải nghiệm như Minecraft bằng mod, và cũng có các game mod như VoxeLibre
    Mã nguồn của các mod viết bằng Lua phần lớn cũng được công khai
    Đặc biệt Zoonami rất thú vị vì mang lại trải nghiệm giống Pokémon

    • Không biết Luanti có các modpack quy mô lớn như AllTheMods 10 hay Meatballcraft hay không
    • Có vẻ Zoonami sẽ đạt được mục tiêu mà Tuxemon chưa làm được
  • Minecraft vốn đã rất dễ bị sao chép lậu, nên có lẽ việc công khai mã nguồn cũng gần như không gây thêm thiệt hại nào
    Hầu hết mọi người vẫn giữ tài khoản bản quyền để dùng máy chủ xác thực của Mojang
    Nó thậm chí còn đủ lớn để có thể công khai mã nguồn kèm điều kiện phi thương mại

    • Tuy nhiên, nếu có “điều khoản cấm thương mại” thì đó không còn là mã nguồn mở thực sự mà sẽ được xếp vào dạng Source Available
  • Kiểu làm rối hung hăng của Proguard khiến mã khó hiểu hơn bằng cách đổi tên lớp thành những chuỗi phức tạp và thậm chí còn thực hiện inline hóa
    Xét theo khía cạnh đó, động thái lần này là một bước tiến lớn

  • Tin rất vui! Điều này mở ra những khả năng mới cho cộng đồng mod Minecraft

  • Các mapping do cộng đồng tạo ra có giấy phép tự do, nhưng mapping của Microsoft thì không
    Điều đó có thể là một cái bẫy nào đó

    • Nhưng giờ bản thân mapping cũng đã biến mất rồi, nên tôi không rõ cái bẫy đó là gì
    • Không biết tên biến có được bảo hộ bản quyền hay không
  • Nếu thật sự muốn làm mọi thứ dễ hơn nữa, có lẽ cách tốt nhất là công khai mã nguồn theo giấy phép cho phép modding