Khám phá VM/370 CE: chạy mainframe IBM ngay trên máy tính
Bài viết hướng dẫn cách dựng và vận hành VM/370 Community Edition – hệ điều hành mainframe IBM mã nguồn mở – thông qua Docker và trình giả lập terminal 3270. Đây là cơ hội hiếm hoi để lập trình viên hiện đại trải nghiệm môi trường máy tính lớn với BASIC, FORTRAN, REXX và các trò chơi cổ điển.

VM/370 Community Edition (CE) là một bản phân phối đặc biệt cho phép bất kỳ ai cũng có thể dựng một hệ thống máy tính lớn (mainframe) IBM ngay trên máy cá nhân. Đây là phiên bản cộng đồng được xây dựng dựa trên VM/370 R6 – phiên bản cuối cùng mà IBM phát hành không kèm giấy phép hạn chế sử dụng.
Banner VM/370 CE
Community Edition là gì?
Có thể ví von một cách dễ hiểu: nếu VM/370 R6 là phiên bản Linux 1.0 mà Linus Torvalds từng phát hành, thì VM/370 CE chính là một bản Fedora mới nhất với đầy đủ tính năng. Nhóm phát triển cộng đồng đã bổ sung rất nhiều cải tiến và sửa lỗi tích lũy qua nhiều năm, biến hệ điều hành này thành một môi trường hoàn chỉnh hơn hẳn bản gốc.
Điểm thú vị là dù rất mạnh mẽ, VM/370 CE chỉ có thể chạy trên một CPU duy nhất với 16 MB bộ nhớ (IBM gọi là "storage"). Toàn bộ phần mềm đi kèm đều là mã nguồn mở hoặc thuộc phạm vi công cộng.
Cách nhanh nhất để có một mainframe
Cách đơn giản nhất là dùng Docker (hoặc Podman – công cụ tương thích có thể giả lập Docker). Chỉ với một lệnh duy nhất:
docker run -it --name vm370 -p 3270:3270 rbanffy/vm370ce
Lệnh này sẽ khởi động máy và hiển thị console trực tiếp trên terminal của bạn. Ngoài ra, nếu tổ chức của bạn sở hữu mainframe IBM thật, có thể xin chạy một máy ảo lồng nhau (nested VM) chạy VM/370 CE, nhờ khả năng tương thích ngược huyền thoại của IBM. Tuy nhiên, tác giả lưu ý rằng thủ tục hành chính có thể phức tạp hơn nhiều so với vấn đề kỹ thuật.
Terminal 3270 – giao diện kiểu "web thập niên 1960"
Mainframe IBM sử dụng terminal hướng màn hình (screen-oriented). Cách hoạt động khá giống trình duyệt web ngày nay: mainframe gửi một màn hình có biểu mẫu, người dùng điền thông tin, rồi terminal gửi lại dữ liệu cho mainframe. Điều đáng kinh ngạc là mô hình này đã xuất hiện từ cuối thập niên 1960, chứ không phải giữa thập niên 1990.
Bài viết sử dụng trình giả lập x3270, có sẵn trên mọi môi trường Unix-like hiện đại. Kết nối tới localhost:3270 là bạn đã sẵn sàng.
Màn hình đăng nhập
Đăng nhập và làm quen với CMS
Người dùng mặc định là CMSUSER với mật khẩu cũng là "CMSUSER". Sau khi đăng nhập, hệ thống sẽ tự động chạy chương trình PROFILE EXEC – tương tự file .bashrc trên Linux.
Có một điểm khác biệt lớn: terminal 3270 không cuộn. Khi màn hình đầy, bạn phải nhấn phím PA2 (trên x3270 là Alt-2, trên c3270 là Control-C) để nhận trang tiếp theo.
Lập trình BASIC và FORTRAN
VM/370 CE đi kèm trình thông dịch BASIC và trình biên dịch FORTRAN IV. Ví dụ, để viết chương trình Hello World bằng BASIC:
EDIT HELLO BASIC
10 print 'hello world'
Sau khi lưu file bằng lệnh file, chạy chương trình bằng BASIC HELLO. Hệ thống sẽ hiển thị kết quả kèm thời gian CPU sử dụng và tổng thời gian thực thi.
Với FORTRAN, quá trình gồm hai bước: biên dịch bằng FORTRAN HELLO, sau đó nạp và chạy bằng LOAD HELLO ( START. Kết quả mặc định được ghi vào file FT06F001 – đây là cách các hệ thống batch cũ xử lý xuất nhập, sử dụng ngôn ngữ JCL (Job Control Language).
Để chuyển hướng kết quả ra terminal, dùng lệnh FILEDEF 6 TERMINAL.
Đăng nhập thành công
Hệ thống file phẳng và các ổ đĩa
CMS sử dụng hệ thống file phẳng, không có thư mục con – một khác biệt lớn với người dùng Unix hay Windows. Thay vào đó, hệ thống hiển thị nhiều ổ đĩa riêng biệt.
Ổ đĩa A là "nhà" của bạn, ánh xạ tới đĩa 191. Ổ S chứa các tiện ích hệ thống với 172 file. Các ổ D, E, F, G ban đầu trống. Lệnh QUERY DISK cho biết bạn đang có những ổ nào, còn LISTFILE * * [ổ] liệt kê nội dung.
Điểm thú vị: không tồn tại khái niệm "ổ đĩa hiện tại". Nếu không chỉ định, hệ thống mặc định hiểu là ổ A.
Cài game và phần mềm từ bên ngoài
Có thể tải file GAMES.VMARC từ nhóm h390-vm trên groups.io. Định dạng VMARC tương tự file ZIP hay TAR. Sau khi tải lên qua chức năng File Transfer của x3270, dùng lệnh:
VMARC LIST GAMES VMARC D
VMARC UNPACK GAMES VMARC D TICTOE MODULE D
TICTOE
Ngoài ra còn có repo VM-370-Games trên GitHub với hàng loạt game BASIC và cả ZORK viết bằng FORTRAN.
Tạo người dùng riêng
Muốn đổi tên người dùng CMSUSER, bạn phải đăng nhập vào MAINT và chỉnh sửa file USER DIRECT. Một khác biệt căn bản: trong VM/370, bạn không "tạo người dùng" mà tạo máy ảo (VM) – mỗi người dùng chính là một VM.
Các VM có thể chia sẻ hệ thống file, chứ không phải chia sẻ đĩa như cách làm quen thuộc trên VMware hay VirtualBox. Việc này được thực hiện ngay trong hypervisor.
Lưu ý về bảo mật: mật khẩu lưu dưới dạng văn bản thuần trong file cấu hình, tối đa 8 ký tự và không phân biệt hoa thường. Đây là chuẩn của thập niên 1970 – tác giả khuyến cáo tuyệt đối không để mainframe VM/370 lộ trực tiếp ra internet.
Trình soạn thảo EE hiện đại hơn
Ngoài EDIT – trình soạn thảo gốc thời kỳ đầu – VM/370 CE còn có EE, hoạt động tương tự các công cụ hiện đại như ISPF. Các lệnh được đặt ở vùng bên trái màn hình, và bạn có thể di chuyển con trỏ để nhập liệu trực tiếp.
Góc nhìn
Với lập trình viên Việt Nam, VM/370 CE là một phòng thí nghiệm lịch sử máy tính đầy giá trị. Rất nhiều khái niệm chúng ta dùng hàng ngày – máy ảo, hypervisor, terminal hướng màn hình, phân quyền hệ thống – đều có nguồn gốc từ chính môi trường này. Việc tự tay dựng một mainframe ảo, viết FORTRAN trên terminal 3270 hay vật lộn với trình soạn thảo EDIT giúp hiểu sâu hơn về lý do các hệ thống hiện đại được thiết kế như ngày nay.
Về mặt thực hành, đây cũng là bài học cảnh tỉnh về bảo mật: mật khẩu dạng văn bản thuần, không mã hóa, quyền truy cập đĩa cấu hình thủ công. Những sai lầm tương tự vẫn xuất hiện trong các hệ thống hiện đại ngày nay, chỉ khác là hậu quả nghiêm trọng hơn nhiều. Nhờ Docker, chi phí trải nghiệm gần như bằng không – chỉ cần một lệnh và vài phút chờ đợi là bạn đã có trong tay một cỗ máy đã từng chiếm trọn một căn phòng máy tính.
Nguồn: rbanffy.github.io · Quy trình biên tập


