
Giới thiệu ZXFoundation™
Tổng quan
ZXFoundation™ là một kernel đơn khối (monolithic) nhắm độc quyền đến kiến trúc z/Architecture. Nó được đóng gói cùng với ZXFoundationLoader™, "bootloader" chính thức của kernel, và có lẽ đó cũng là cách duy nhất khả thi. Dự án là một bản PoC chứng minh rằng z/Architecture đúng là một kiến trúc đầy thú vị chứ không chỉ là những mainframe đắt đỏ mà chỉ một tỉ lệ nhỏ người dân biết đến, và việc làm OSDev trên nó là hoàn toàn khả thi. Dự án thuần túy nhằm mục đích nghiên cứu và giáo dục. Được cấp phép theo giấy phép mã nguồn mở Apache-2.0.
Lịch sử
Lý do dẫn đến sự ra đời của kernel ZXFoundation khá là... ngẫu nhiên. Ban đầu, khi tôi chuyển sang macOS (chính xác là một bản Hackintosh), phần lớn các dự án của tôi gần như không tương thích do thiếu một bộ toolchain được cấu hình đúng cách cho hệ thống build (chủ yếu là CMake). Và lúc đó, tôi khá chán ngấy những khái niệm cũ rích của x86_64. Vì vậy, tôi nảy ra một ý tưởng nhỏ: làm một kernel trên một kiến trúc mà tôi chưa từng thử trước đó, không phải x86_64, riscv hay arm. Sau đó tôi nghiên cứu (hàng giờ), và thực sự kết thúc với sparc64. Chủ yếu vì HomeBrew clang (llvm) được build với hỗ trợ sparc và nó là một nền tảng khá nổi tiếng về mặt lịch sử, tên dự án lúc đó là UltraSpark. Nhưng ôi trời, tôi đã nhầm! Đáng tiếc là vận may không đứng về phía tôi. Tôi mất hơn hẳn 2 tuần liền mắt dán chặt vào máy tính, thậm chí không một dòng "Hello, World!" nào cả. Rồi tôi bỏ cuộc. Mã nguồn dự án vẫn còn đó, nguyên vẹn không đụng đến. Và điều đó, một cách gián tiếp, đã sinh ra ZXFoundation về sau. Chi tiết thú vị: folder đó, ngày nay, chứa mã nguồn của ZXFoundation, vẫn còn mang tên "UltraSpark".
Vài ngày sau, khi tôi đang đọc các trang OSDev cho vui, tôi vô tình gặp phải bootloader FLATBOOT, một multi-stage loader nhắm đến các máy từ S/360 đến z/Architecture, được thiết kế cho Hercules (trình giả lập). Và đó là lúc tôi lần đầu có hứng thú với z/Architecture. Mặc dù FLATBOOT là một cái kickstart đầy thú vị, nhưng nó có nhiều lỗ hổng. Nó chỉ tải được ELF32, dựng một cách vụng về và dở dang giao thức stivale2 của x86_64, cùng với gánh nặng cũ kỹ (và tất nhiên, GNU Autotools). Và tôi cũng không thể làm nó hợp tác với kernel của mình. Dù vậy, những tàn dư của nó vẫn còn được dùng trong các phiên bản hiện tại của ZXFoundation — cụ thể là tiện ích bin2rec.
Vậy tôi đã nói: "Thôi kệ, tôi sẽ tự làm hệ sinh thái của riêng mình". Tôi gắn nhãn dự án là "ZXFoundation - z/Architecture PoC kernel". Những ngày đầu tiên là... khó khăn. Đa phần là "tải kernel lên", bạn biết đấy, trên z/Architecture rõ ràng không có BIOS/UEFI hay một firmware chuẩn hóa nào để mà bắt đầu. Tất cả đều xoay quanh IPL và CCW. Lúc đó, tôi cố gắng sao chép các phương án hiện có như zIPL, và chính FLATBOOT. Về cơ bản đó là một chainloader nhưng với những giai đoạn đầu nhỏ chỉ chứa các chuỗi CCW thô tải lên các giai đoạn sau. Kiến trúc nhìn chung hơi giống một máy BIOS legacy cổ điển. Dù vậy tôi làm khác đi và giảm thiểu việc dùng các chuỗi CCW thô trong ASM, thay vào đó dùng một trình điều khiển đĩa viết hoàn toàn bằng C. Và đó chính là lúc trở thành ZXFoundationLoader, "bootloader" freestanding chính thức cho ZXFoundation, dành độc quyền cho ZXFoundation.
Trước tất cả những rắc rối với bootloader và mọi thứ, cuộc sống thực ra là... dễ dàng! Nhờ một tùy chọn duy nhất — tùy chọn "-kernel" trong "qemu-system-s390x", tôi chỉ việc compile kernel và chạy nó ở đó, không phải lo lắng về IPL cùng mọi thứ kia, nhưng thực tế đã tát thẳng vào mặt. Tôi không thể dùng nó theo kiểu đó! Vì những lý do rõ ràng, đó là cách "gian lận" để bắt đầu nhanh chóng.