Chạy Mac OS X trên Infinite Mac
(blog.persistent.info)- Infinite Mac nay đã có thể chạy Mac OS X đời đầu trong trình duyệt; hiện 10.1 và 10.3 là các phiên bản được hỗ trợ tốt nhất
- Khi hướng đi DingusPPC hiện có bị kẹt ở lỗi kernel panic và vấn đề đồ họa, dự án chuyển sang port PearPC, một trình giả lập được tạo ra với mục tiêu giả lập Mac OS X đầu thập niên 2000
- Hiệu năng vẫn còn chậm: Mac OS X 10.2 mất gần 2 phút để hoạt động hoàn chỉnh, và các tối ưu hóa cũng chỉ rút ngắn được khoảng 15 giây
- Một lỗi bỏ sót kiểm tra bit
FPtrong xử lý dấu phẩy động PowerPC đã gây ra vấn đề render Dock và cửa sổ Finder; quá trình sửa lỗi cũng cải thiện độ ổn định của DingusPPC - Infinite HD đã được cấu trúc lại để chứa phần mềm indie thời kỳ Mac OS X đời đầu và các công cụ Developer CD, nhưng khác biệt HFS/HFS+ và khả năng tương thích
.dmgcũ vẫn là những hạn chế
Chạy Mac OS X đời đầu trong trình duyệt
- Infinite Mac nay có thể chạy Mac OS X đời đầu
- Mac OS X 10.1 và Mac OS X 10.3 là các phiên bản được hỗ trợ tốt nhất
- Tốc độ chạy không nhanh, nhưng cảm giác cũng gần với thực tế là phần cứng thật thời đó cũng không khá hơn nhiều
- Infinite HD, vốn cung cấp kèm phần mềm phù hợp với thời kỳ, cũng được cấu trúc lại xoay quanh phần mềm indie thời Mac OS X đời đầu
Chuyển hướng sang port PearPC
- Ban đầu, dự án định dùng DingusPPC để chạy Mac OS X trên Infinite Mac, nhưng khoảng mùa hè năm ngoái đã không tiến xa hơn được do kernel panic và lỗi đồ họa
- Đã thử thu hẹp phạm vi vấn đề bằng chế độ chạy xác định, nhưng bước tiếp theo không rõ ràng
- Phương án thay thế được chọn là PearPC
- PearPC được tạo ra vào đầu thập niên 2000 để giả lập Mac OS X trên các máy x86 chạy Windows và Linux
- Sau khi Apple chuyển sang Intel, sự quan tâm giảm dần và codebase gần như bị xem là đã dừng phát triển
- Việc kanjitalk755 đã tạo một nhánh thử nghiệm PearPC có thể build và chạy trên macOS hiện đại trở thành điểm khởi đầu cho việc port
- PearPC là một codebase đa nền tảng và không dùng rộng rãi các khái niệm khó port như thread, nên khá dễ chuyển sang WebAssembly/Emscripten và runtime của Infinite Mac
- Trong vài ngày, dự án đã tiến tới build được, xuất video, nạp disk image và nối input chuột/bàn phím
- Kết quả là Mac OS X 10.2 có thể chạy trong trình duyệt ổn định hơn trước
Tối ưu hiệu năng và các nút thắt còn lại
- PearPC chạy Mac OS X 10.2 ổn định hơn, nhưng cảm giác chậm hơn DingusPPC
- Bộ benchmark harness của DingusPPC được chuyển sang PearPC, đồng thời các tối ưu hóa từng làm cho DingusPPC cũng được áp dụng lặp lại cho PearPC
- Cả hai trình giả lập đều là interpreter thuần dựa trên bảng tra cứu, nên công việc tương đối trực tiếp
- Thời gian khởi động Mac OS X 10.2 giảm được khoảng 15 giây
- Ngay cả sau tối ưu hóa, vẫn mất gần 2 phút để đạt trạng thái có thể hoạt động hoàn chỉnh
- UI của Infinite Mac đã được thêm thông báo rằng quá trình khởi động Mac OS X có thể chậm
- Nút thắt lớn nhất là PearPC không có cache MMU
- Mọi thao tác load/store đều phải đi qua tính toán địa chỉ phức tạp và tốn kém
- DingusPPC có cache phân tầng trưởng thành hơn, có vẻ hiệu quả
- PearPC có thể ổn định hơn DingusPPC khi chạy 10.2~10.4, nhưng codebase kém nguyên tắc hơn
- Dùng firmware và driver video tùy biến
- Chỉ triển khai một phần các lệnh PowerPC cần cho Mac OS X
- Về dài hạn, kỳ vọng DingusPPC sẽ trở thành lựa chọn nhanh, ổn định và chính xác
Kiểm tra bit FP và lỗi render
- Trong lúc áp dụng cách “bảng giải mã hợp nhất” cho interpreter của PearPC theo từng nhóm opcode, một hồi quy đã xảy ra ở thay đổi liên quan đến phép toán dấu phẩy động
- Xuất hiện lỗi hiển thị Dock
- Cửa sổ Finder không mở được
- Việc dispatch các nhóm opcode 59 và 63 không chỉ là tra cứu đơn giản mà trước hết phải kiểm tra bit
FPtrong Machine State Register- Nếu bit
FPkhông được đặt, phải ném ngoại lệ “floating point unavailable”
- Nếu bit
- Các chip PowerPC dùng trong Mac thời đó có FPU, nhưng ngoại lệ này xảy ra thường xuyên trong lúc Mac OS X khởi động
- Mã nguồn kernel xnu thời đó có vị trí xóa bit
FPvà trình xử lý ngoại lệ - Có vẻ đây là tối ưu hóa để tránh lưu/khôi phục thanh ghi FPU khi chuyển ngữ cảnh
- Mã nguồn kernel xnu thời đó có vị trí xóa bit
- Khi triển khai cùng kiểm tra
FPtrong mã dispatch đã tối ưu, vấn đề render biến mất - Lỗi tương tự cũng còn trong DingusPPC
- DingusPPC không kiểm tra bit
FPvà luôn cho lệnh dấu phẩy động đi qua - Sau bản sửa nhanh để phát sinh ngoại lệ, lỗi hiển thị Mac OS X biến mất
- Sau đó, triển khai chính thức và bản sửa tránh suy giảm hiệu năng được đưa vào, giúp độ ổn định của DingusPPC cải thiện đáng kể
- DingusPPC không kiểm tra bit
- Việc kết hợp hai trình giả lập đã mở rộng phạm vi Mac OS X đời đầu có thể chạy được
- DingusPPC có thể chạy 10.1 ổn định
- PearPC không chạy 10.1 ổn định
- 10.0 vẫn không ổn định, còn Public Beta thì kernel panic ngay lập tức
Cấu trúc lại Infinite HD
- Một trong những điểm hấp dẫn của Infinite Mac là Infinite HD chứa phần mềm đúng thời kỳ được mount kèm
- Để phù hợp với hỗ trợ Mac OS X, một phiên bản riêng đã được tạo ra, vượt ra ngoài các ứng dụng Classic Mac thập niên 80~90 và chứa phần mềm thời Mac OS X đời đầu
- Ngoài các ứng dụng cá nhân ưa thích, danh sách cũng được mở rộng nhờ các đề xuất
- Disk image được tạo bằng cách mở rộng cơ chế tự động hóa hiện có
- Vì thời Mac OS X đời đầu dùng disk image rất nhiều, chức năng đưa
.dmgvào các thư mục bổ sung trong image được tạo đã được thêm vào
- Vì thời Mac OS X đời đầu dùng disk image rất nhiều, chức năng đưa
- Các file
.dmgcũ có nhiều biến thể dù cùng phần mở rộng, nên không phải lúc nào cũng mount được bằnghdiutiltrên macOS hiện đại- Cuối cùng, dự án dùng dmg2img để trích xuất raw partition trước
- Sau đó dùng cách vòng: tạo lại một disk image mới mà macOS hiện đại có thể mount và sao chép
- Khi sưu tầm phần mềm thực tế, phần mềm Mac OS X đầu đến giữa thập niên 2000 là một vùng ít được bao phủ
- Macintosh Garden cũng có một phần, nhưng không phải ưu tiên cao
- Ở nhà cung cấp gốc, nhiều phần mềm đã quá cũ nên bị gỡ xuống
- Wayback Machine được sử dụng nhiều
- Developer CD đi kèm từng phiên bản Mac OS X cũng được cài đặt để có thể dùng các công cụ như Project Builder và Interface Builder
Hệ thống tệp và mount nhiều đĩa
- Quy trình build đĩa chủ yếu xoay quanh HFS, nhưng mặc định của thời kỳ đó là HFS+
- HFS+ cung cấp các tính năng nâng cao hơn, như tên tệp dài hơn và ký tự Unicode tùy ý
- Các file disk image phụ thuộc vào tính năng HFS+ không thể chuyển đổi mà không mất mát
- Với đa số phần mềm, điều này không gây vấn đề lớn
- Để mount tối đa 3 ổ gồm boot disk, Infinite HD và Saved HD, dự án mượn cách làm từ fork DingusPPC
- Khi khởi động, tạo ngay một disk image đa phân vùng từ số lượng tùy ý các partition image được chỉ định
Chế độ Aqua và UI trang web
- Để hoàn thiện việc bổ sung Mac OS X, các control của trang Infinite Mac cũng được thêm chế độ Aqua
- Trước đó đã có giao diện classic, Platinum và NeXT
- Trong thiết kế Aqua, phong cách 10.0/10.1 được chọn
- Dù tác giả thích phiên bản tiết chế hơn của 10.3 và 10.4, cảm giác hoài niệm với 10.0/10.1 được cho là lớn hơn
- Để dùng cùng asset hình ảnh như OS, tài nguyên gốc được trích xuất thay vì dùng ảnh chụp màn hình
- Vì asset Aqua dùng nhiều thành phần bán trong suốt, ảnh chụp màn hình thông thường là không đủ
- resource_dasm và pxm2tga được dùng để trích xuất asset gốc từ
Extras.rsrc
Chạy Classic, chế độ verbose và những phát hiện nhỏ
- Vì có thể mount nhiều image, có thể đặt kèm một partition Mac OS 9 và khởi động môi trường tương thích Classic
- Tính năng này chỉ hoạt động trên 10.1
- PearPC không hỗ trợ Classic
- Kết quả là có thể giả lập ứng dụng Classic Mac bên trong Mac OS X được giả lập trong máy ảo WebAssembly
- Các image Mac OS X cũng cho thấy thay đổi hành vi của Calculator
- Đến 10.3 vẫn chưa có hành vi nhấn lặp lại
= - 10.4 có hành vi đó
- Đến 10.3 vẫn chưa có hành vi nhấn lặp lại
- Do Mac OS X khởi động chậm, chế độ verbose được đưa ra để hiển thị thêm tiến trình
- PearPC có cơ chế tích hợp sẵn
- DingusPPC được thêm tính năng chỉ định biến Open Firmware khi khởi động
- Trong hộp thoại custom instance của Infinite Mac, tính năng này được hiển thị dưới dạng công tắc “Debug Mode”
- Tác giả cũng đã cố giành domain
macosx.appnhưng domain này đã được đăng ký- Domain đó chuyển hướng tới một video YouTube cụ thể
- YouTuber trong video trả lời rằng không phải họ là người đã đăng ký
Ứng viên tiếp theo và khả năng QEMU
- Với hỗ trợ Mac OS X, Infinite Mac đã chạm tới điểm gần với macOS hiện đại
- Sau đó vẫn còn hai lần chuyển đổi CPU và nhiều thay đổi nhỏ
- Tiger là hình thái mà ngay cả người dùng macOS hiện nay về cơ bản vẫn có thể nhận ra
- Các mục tiêu retro computing sâu hơn hoặc đặc thù hơn còn lại gồm A/UX, Lisa, Pippin và Newton
- Trước đây, QEMU được xem là dự án quá lớn để port sang WebAssembly, và hiệu năng của qemu.js cũng có vẻ khó dùng được
- Gần đây, qemu-wasm và bài trình bày FOSDEM đã cho thấy lại khả năng này
- Hiệu năng demo guest Linux khá khích lệ
- Trong một benchmark nhanh tính checksum MD5 cho 100MB dữ liệu, qemu-wasm mất 8 giây, DingusPPC mất 13 giây, PearPC mất 18 giây
- Với guest đồ họa là Mac OS X thì vẫn còn khoảng cách lớn
1 bình luận
Ý kiến trên Hacker News
Đúng là PearPC đã trụ được khá tốt trong vài năm, nhưng sau khi maintainer ban đầu qua đời trong một tai nạn tàu hỏa, dự án đã mất phần lớn động lực
Khi đó tôi là một người dùng nhiệt thành và thành viên cộng đồng, đến giờ nghĩ lại vẫn thấy rơi nước mắt
https://www.wired.com/2004/07/pearpc-coauthor/
Infinite Mac là một bộ sưu tập các bản phát hành hệ thống và phần mềm Macintosh cổ điển cùng NeXT, giúp dễ dàng truy cập ngay trong trình duyệt web
https://infinitemac.org/
Một trong những phần thú vị nhất của bài viết là liên kết tới trình giả lập CPU PPC dưới 700 dòng
https://github.com/kwhr0/macemu/blob/master/SheepShaver/src/...
Ta thấy sự gọn nhẹ như vậy ở các trình giả lập 6502, nhưng với một kiến trúc tương đối hiện đại thì không phổ biến
Tôi không tưởng tượng nổi một người mê công nghệ 20 tuổi ngày nay sẽ cảm thấy thế nào khi đối diện OS X 10.4 hay 10.5, 10.6
Hơi cay đắng là tôi lại nghĩ tới cảnh một người thời kỳ đen tối đứng trước tượng cổ điển và tự hỏi: “Loài người từng có thể tạo ra thứ như thế này sao?”
Tuy vậy thị hiếu thay đổi. Người thời kỳ đen tối thật sự có thể đã nghĩ “Sự suy đồi ngoại giáo này là gì?”, còn ngày nay có người có thể nhìn và nghĩ “Biểu tượng kiểu ảnh thật trông sến quá!”
Cài app vẫn là “kéo thả app từ dmg kiểu IKEA”, thỉnh thoảng có zip hoặc pkg. Cửa sổ Finder đã có bookmark ở sidebar bên trái, Dock cũng hoạt động y như vậy. Có trải qua giai đoạn Dock 3D kỳ quặc, hình như là Leopard
Không có Mac App Store, nhưng ngày nay hầu như cũng chẳng mấy ai dùng; Spotlight thì mới xuất hiện từ Tiger. Dễ nhận ra hơn nhiều so với khác biệt giữa Windows XP và 11. XP vận hành khá khác 11
Hồi đó việc đụng vào thư mục hệ thống không phức tạp như bây giờ
Đầu thời Trung cổ cũng có nhiều hiện vật và công trình kiến trúc đẹp. Tuy không còn lại nhiều, nhưng chỉ riêng những thứ tôi từng thấy tận mắt cũng có ví dụ như mộ thuyền Sutton Hoo hay các nhà thờ Anglo-Saxon
Ảnh chụp màn hình thật sự gây kinh ngạc. Cá nhân tôi thấy Mac OS X trông đẹp hơn Mac OS ngày nay rất nhiều
Nó rõ ràng và ngăn nắp, tạo cảm giác “Được rồi, với môi trường này mình có thể làm việc!”
Mac OS hiện tại thì cho cảm giác như “Cứu với, tôi rơi vào một bao kẹo rồi, làm sao thoát ra đây?” Tôi tò mò không biết người khác có cảm thấy vậy không
Windows cũng tương tự. Hầu như chẳng ai làm việc trực tiếp với bản thân hệ điều hành, app native cũng hiếm, phần lớn là dựa trên trình duyệt hoặc là app đa nền tảng dùng hệ thống thiết kế của bên thứ ba
Tôi cũng chán việc các công ty phần mềm giả vờ như họ làm phần mềm giỏi rồi
10.4 Tiger cũng tương tự, nhưng thanh menu phía trên được làm bóng nên theo thời gian tôi thấy không còn thích lắm. 10.5 Leopard có Dock 3D lòe loẹt và quê, thanh menu trên trong suốt, cùng các gradient hiện đại hơn
Hồi đó trông rất ngầu, nhưng gradient không ngầu bằng brushed metal và Aqua. Sau đó thì mọi thứ đều hơi nhàm chán
Thật bất ngờ là họ thành công với dự án pearpc đã hơn 10 năm không có commit cuối cùng: https://github.com/sebastianbiallas/pearpc
Fork của anh ấy ở đây: https://github.com/mihaip/pearpc
Có vẻ đã thêm target WebAssembly nhưng vẫn duy trì hỗ trợ x86-64
Ngoài ra anh ấy cũng viết blog về quá trình đưa NextStep vào Infinite Mac: https://blog.persistent.info/2024/03/infinite-mac-nextstep.h...
Những thứ như thế này thật sự rất tuyệt. Vào thời đó, Aqua giống như một sự mặc khải
Đó là một Unix phổ thông với độ dễ dùng đến mức bà cũng có thể dùng được, lại còn hỗ trợ cả các ứng dụng bên thứ ba lớn, nên đúng là một cú home run trọn vẹn
Hy vọng một số yếu tố như vậy sẽ quay lại trong Liquid Glass, nhưng nói thật thì Aqua đến giờ vẫn trông rất đẹp
Điều mà các bản bắt chước như Windows Vista hay các theme Linux bỏ lỡ là mọi thứ đã nhất quán và dùng được đến mức nào. Nó trông ngầu, nhưng quan trọng hơn là nó hoạt động thật sự tốt
Thật vui khi thấy lại những UI trong ký ức. Tôi nhớ Platinum khoảng thời Macintosh OS 8, và UI MacOS X thời OS X 10.3 và 10.4 nhìn chỉ muốn liếm
Tôi cũng thích OpenLook của SunOS/Slowlaris, UI NeXTStep/OpenStep, Microsoft Windows 2000 — đỉnh cao trước thời Winblows XP, thứ lẽ ra không bao giờ nên trộn màu cam với xanh lá — và cũng nhớ đến IRIX của SGI cùng những niềm vui kiểu Motif
Các thành phần UI hầu như luôn có thể phân biệt, dễ hiểu và nhất quán. Khi thao tác với một control UI chuẩn, trước khi thực thi cũng đã biết chính xác chuyện gì sẽ xảy ra, và thực tế đúng là diễn ra như vậy
Có vẻ như kết quả của việc cho phép tùy biến, gắn theme, thay thế và làm cho “ngầu” hơn chính là những gì chúng ta có ngày nay
Những ngày đầu của OS X là thời hoàng kim thật sự của Mac. Phần cứng khá cạnh tranh với x86, còn hệ điều hành thì thuộc hàng tốt nhất mọi thời
Cuối cùng cả hai đều bắt đầu trục trặc, nhưng hiện nay phần cứng đang ở thời hoàng kim thứ hai, nên ta có thể mơ rằng một ngày gần đây Mac OS có thể lại trở nên xuất sắc
Tuy vậy, ngay cả trong thời hoàng kim phần cứng mới này, hiệu năng mô phỏng ở đây trên M1 và Safari gần như ở mức khó dùng
Kernel panic xảy ra hằng ngày, và QuickTime thường chết vì lỗi segmentation khi đang xem video
Muốn phát các định dạng tệp như wmv hay divx thì phải làm một nhiệm vụ truy tìm và cài đúng codec
Máy cũng bị quá nhiệt vì để làm cho đẹp mà không bố trí đúng các khe thông gió cho luồng khí
Chiếc M4 mini bản cơ bản nhập môn thật đáng kinh ngạc. Cả chiếc máy tính tiêu thụ ít điện hơn một GPU x86 có hiệu năng tương tự
Dark Castle! Hồi nhỏ, bố tôi có một chiếc Apple Lisa. Ông đang phát triển một bộ sản phẩm kế toán cho Apple nên Apple đã tử tế cung cấp chiếc máy đó
Khi ấy tôi xem cỗ máy đáng kinh ngạc này là điều hiển nhiên, và chỉ dùng để chơi game với MacPaint. Trong bộ sưu tập đĩa 3,5 inch của bố có một đĩa ghi “Dark Castle”, nhưng vì lý do tôi không nhớ, nó không chạy trên Lisa
Tôi đoán đó là một trò chơi, nhưng rất tiếc vì không thể chơi được, và bị cuốn hút bởi chiếc đĩa bí ẩn ấy
Đến năm 2025, tôi chạy trình giả lập Infinite Mac System 7: https://infinitemac.org/1991/System%207.0
Tim tôi như hẫng một nhịp. Ngay trong thư mục “Games” có Dark Castle
Sau 30 năm, cuối cùng tôi cũng có thể chơi trò này. Đồ họa rất cuốn hút, và cũng cảm nhận được các yếu tố của những game kinh điển Sierra như King’s Quest và Prince of Persia
https://en.wikipedia.org/wiki/Dark_Castle
Lịch tối nay coi như đã được định sẵn với trò này