- 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
Ý 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
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
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
Không còn cần cộng đồng phải tự tạo và dùng như trước nữa
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
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
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
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
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 đô
Hầu như không có ai muốn đeo kính VR đắ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
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
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
Bản lưu trang web thời điểm đó
Các tài sản nghệ thuật vẫn được bảo hộ bản quyền
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
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
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 đó
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