Aseprite là công cụ vẽ pixel art mình khá thích, nhưng hiện tại nó được bán trên Steam với giá khoảng hơn 200 ngàn vnđ chứ không phát hành bản build sẵn miễn phí nữa. Điều thú vị là source code của Aseprite vẫn được công khai trên GitHub, nên về lý thuyết ai cũng có thể tự tay build nó để dùng cho cá nhân. Tò mò nên mình quyết định thử tự build một bản cho riêng mình xem sao.

Nghe thì có vẻ chỉ là "tải code về rồi bấm nút build", nhưng thực tế lại là một bài học nhỏ về cách một phần mềm desktop thật sự được đóng gói. Aseprite dùng CMake để quản lý cấu hình build, Ninja để build nhanh, và đặc biệt là phụ thuộc vào Skia — chính là thư viện đồ hoạ mà Google Chrome cũng đang dùng. Riêng việc tải đúng bản Skia tương thích với version Aseprite mình chọn đã mất kha khá thời gian, vì chỉ cần lệch version một chút là build sẽ báo lỗi ngay từ bước cmake.

Sau khi cài đủ dependency (trình biên dịch, CMake, Ninja, Skia), mình chạy lệnh cmake để generate project, rồi dùng Ninja để build. Lần đầu chạy thử, đúng như dự đoán — dính lỗi thiếu thư viện. Ngồi đọc lại log lỗi, so sánh với các issue người khác từng gặp trên GitHub, mình mới hiểu ra vấn đề nằm ở việc thiếu vài gói dev dependency của hệ điều hành. Sửa xong, build chạy lại và ra được file thực thi — cảm giác lúc đó thật sự đã, kiểu tự tay mình vừa "sinh ra" một phần mềm mà trước giờ chỉ biết dùng.

Trải nghiệm này cho mình thấy build từ source không chỉ để "có phần mềm dùng", mà còn giúp hiểu rõ hơn về vòng đời của một dự án mã nguồn mở: từ dependency, hệ thống build, đến cách một ứng dụng desktop thực sự được đóng gói ra sao trước khi tới tay người dùng.

Tổng kết

Tự build một phần mềm có sẵn mã nguồn mở, dù là công cụ mình đã quen dùng như Aseprite, vẫn mang lại trải nghiệm khác hẳn so với chỉ tải bản cài đặt sẵn. Đây là một cách học thực hành hiệu quả về build system, quản lý dependency, và cách phần mềm được đóng gói — những kiến thức khá hữu ích cho công việc lập trình sau này. Mình nghĩ sẽ còn thử build thêm vài dự án mã nguồn mở khác trong các bài tiếp theo.