Система першого Mac'a: ресурси, toolbox та езотерика

Це дуже поверхнева подорож першою Масівською операційною системою. Вона не така проста, як здається. І, або мені це тільки здається, вона чимось дуже схожа на найперший iPhone. В обох випадках подолання сили гравітації, компроміси та оригінальні інженерні рішення, що унеможливили можливе.

Продовження, початок тут.


Перш ніж ми перейдемо до опису нутрощів Мас'овської операційної системи, скажу кілька слів на захист заліза першого Mac'a. Його конфігурація 128K/400K була абсолютно недостатня, це факт, недостатня саме для комп'ютера з графічним інтерфейсом користувача - який вимагав значно дорожчої елементної бази, ніж можна було собі дозволити.

Середній обсяг оперативної пам'яті тодішніх комп'ютерів був 64 К, а накопичувачі на гнучких дисках, що використовуються в індустрії, як правило, вміщували менше 200 K.

Відгалуження ресурсів (Resource Fork)

Концепція поділу файлів на кілька частин придумана не Apple. Щось віддалено схоже використовувалося в Xerox PARC, в Novell Networks і навіть у Windows, але ніде ця ідея не отримала такого яскравого і незвичайного втілення, як у класичній Масівській системі.

Файл у Масовській системі складався з двох відгалужень, відгалуження даних (Data Fork) і відгалуження ресурсів (Resource Fork), будь-яке з яких могло бути порожнім. Всі об'єкти файлової системи - документи, програми та документи системи - складалися з цих двох відгалужень і активно їх використовували.

Відгалуження даних нічим не відрізнялося від звичайного файлу в інших системах, структура і вміст цієї частини файлу визначалися програмою, якою створювався файл. У програмах, як правило, відгалуження даних було порожнім.

А відгалуження ресурсів будувалося за правилами, визначеними Apple Computer і автором менеджера ресурсів Брюсом Хорном.


Типи (групи) ресурсів позначалися константами типу OSType, значення якого було числом, але на екрані відображалося як послідовність з 4 літер. Наприклад, CODE, DLOG, ALRT, BNDL і багато-багато інших.

Числовий ідентифікатор - двобайтове ціле число зі знаком, при цьому всі значення від 128 до 32767 призначалися для використання сторонніми розробниками. Значення від -32768 до -16385 були (і залишилися навічно) зарезервовані для чогось невідомого.

Інші були зарезервовані для ресурсів системи, вона незримо була присутня під час роботи програми, і забивати ресурси пропоновані їй своїми було б поганим тоном і для системних ресурсів, які були власністю інших системних ресурсів.

Крім типу та ідентифікатора, ресурс можна назвати «людським» ім'ям, але ім'я було необов'язковим. Ім'я можна було використовувати для вказування на запитуваний ресурс.

Розмір ресурсу, в перших версіях системи, був суворо обмежений 32 кілобайтами. Пізніше це обмеження було знято - специфічний для Microsoft кодовий ресурс PCOD тягнув в Excel 2.5 або в Word 5.1 на пару мегабайт. Але, навіть в 32 кілобайти можна вкласти багато чого, хоча в ресурсах першої системи для самого першого Mac'a їх розміри були набагато скромнішими.

Система управління пам'яттю в Масівській системі була новаторською і передовою в 1984-му, вона ж (не змінилася за 12 років) виглядала абсолютно архаїчною в 1996-му, в порівнянні з аналогічною системою в Windows. Але в 1984-му вона, особливо її особливий підхід до завантаження в оперативну систему ресурсів, була на висоті. Якщо налаштування ресурсу дозволяли, він вилучався з оперативної пам'яті при перших ознаках її нестачі. Структура, якою він був представлений у додатку, відповідала за завантаження його в пам'ять на першу вимогу.

Ресурси були б чимось нудним, якби не ResEdit, безкоштовний додаток від Apple.


Воно відкривало абсолютно несподіваний і фантастичний вид на знанку Масовських додатків і документів. Нижче наведено зворотний бік програми TeachText, безкоштовного і навіть з відкритим вихідним текстом, простенького текстового редактора для класичної системи. У 1984 році його ще не було, але MacWrite, MacPaint і ResEdit виглядали приблизно так.


Ресурс BNDL, наприклад, пов'язував програму з іконкою (іконками) самого себе, а також з типами редагованих ним файлів, і він же присвоював цим типам файлів іконки.

Цей ресурс взаємодіяв з іншими ресурсами різних типів, і всі ці зв'язки можна було визначити, за допомогою ResEdit, в одному місці. З'ясувати, хто придумав ResEdit, на жаль, не вдалося.


На ілюстрації (кольорове яблучко в меню - це знято в якійсь із 7-х версій системи) в BNDL програми TeachText додається підтримка ще одного типу файлів, ttwo. Насправді TeachText (код типу програми ttxt) вмів працювати з файлами типу TEXT і з захищеними від запису файлами типу ttro. Додавання нового типу підтримуваних файлів тільки в BNDL практично безглуздо: підтримка здійснюється в коді.

За аналогією з ttro, можна припустити, що формат - ttwo - дозволяє тільки створювати файли, які потім неможливо буде прочитати.


У документі, наприклад, того ж TeachText (Creator code = «ttxt», File code = «TEXT») ресурси, швидше за все, показували розмір і положення документа в момент його закриття, щоб все можна було почати рівно з того місця, на якому минулого разу все закінчилося.

Відгалуження ресурсів не увійшли у функціональність Mac OS X. Apple Computer, в останні роки минулого тисячоліття, не мала ніякого впливу на індустрію. Її вважали все ще гинучою компанією. Технічно перетворення файлів з двома відгалуженнями на директорію з файлом (копією відгалуження даних) і директорією (копією ресурсів) було нескладно, і підтримувати такі комплекси в системах без гілок - теж не ядерна фізика.

Apple не змогла б домогтися руху назустріч з іншого боку. Без підтримки на чужих системах ніяке технічне рішення не спрацювало б. Крім того, у компанії було дуже погано з ресурсами, гостро не вистачало часу - і його не стали витрачати на те, без чого можна було обійтися. У NeXTSTEP використовувався віддалено схожий, але інший підхід до організації додатків, він був перенесений в Mac OS X один в один.

Toolbox, System і езотерика

Експертів (не «експертів», розчарованих відсутністю інопланетянина в корпусі Mac'a), знайомих з графічними користувальницькими інтерфейсами не з чужих слів, дивувало інше: як Apple змогла змусити все це працювати в 128 K оперативної пам'яті і на 400 К дискової. Магія?

Графічні інтерфейси давно вже були не просто теорією. Вони існували не тільки у вигляді лабораторних гомункулусів, їх вже пробували на роль комерційних проектів, в Xerox PARC (Alto та інші) і на самій Apple (Lisa). Спроби були чудові, але з точки зору банальної ерудиції ні до чого, крім розчарування, не привели. Концепція була визнана порочною, безглуздою і нереальною. Гарною, так. Захоплюючою. Але тільки не робіть цього!


Mac був плоть від плоті типовий комп'ютер свого часу. Рази в два більш потужний і упакований, ніж середній в ті часи апарат для домашнього користувача. Але нічого надприродного: 32-бітний процесор, миша, 24-бітна адресація та 16-бітна шина. Круто, але не більше того. Були машинки і помічніші.

Те, що змогли зробити в Apple, було логічно і вивірено, до дрібниць, як геніальний фільм, знятий геніальним режисером, який не залишає нікого байдужим. Але головне диво було за кадром для стороннього спостерігача. Воно відрізняло Mac від його побратимів того часу. Комплекс програмного забезпечення.

У технічній документації цей комплекс розділений на дві частини: тулбокс і системні утиліти. Тулбокс - це і є той самий графічний інтерфейс користувача. Це різні менеджери, такі як QuickDraw, менеджери подій, вікон, меню. Все, що не увійшло в тулбокс, - файлова система, управління пам'яттю, взаємодія з зовнішніми і внутрішніми пристроями тощо - називалося системними утилітами.

Низькорівневі системні утиліти писалися asm, мовою асемблера Motorola 68000. До речі, цілком пристойна мова, шкода, що вона вже нікому не потрібна. Типовий асемблер, але... Стоп! На asm я написав свою першу Масівську програму.

Менеджери тулбоксу розроблялися і доводилися до досконалості на Apple Pascal, це об'єктно-орієнтована варіація Паскаля, розроблена Ніклаусом Віртом і Ларрі Теслером. Потім, перетворені Apple Pascal на машинний код (той же asm, практично), частини цього менеджера оптимізувалися (за розміром) вручну. Взагалі-то, це одна з суворо заборонених практик - вносити зміни в машинний код - але інакше Mac'a б не було.


Займався витисканням коду (без втрат функціональності) Енді Херцфелд. Це чимось нагадує перегонку спиртовмісних рідин... У деяких випадках, в результаті «ректифікації», виконуваний код був зменшений в 3-4 рази. Езотерична практика. Це вимагає, причому одночасно, педантизму і творчості.

Плюси очевидні: величезну за обсягом хмара програмного забезпечення втиснули в тісну реальність недорогого комп'ютера. Мінуси, я думаю, теж зрозумілі. Уявіть собі, що в ретельно налагоджений код на Паскалі потрібно внести серйозну зміну, а таке трапляється в кожному складному проекті... Цілий модуль, а то й взагалі все заново!

Ця практика застосовувалася при розробці всіх версій System, включаючи System 6. Першою версією без езотерики стала System 7. Якщо System 6 разом із запущеним додатком спокійно вміщалася в 1 мегабайті оперативної пам'яті, одній System 7, тільки для себе, потрібно як мінімум півтора мегабайта.

Езотеричну практику згадали при розробці Ньютона. Роль Apple Pascal грав Dylan, роль asm - C++.

Значну частину стисненого коду планувалося розмістити на мікросхемі ПЗУ. Такий код постійно доступний (не вимагає завантаження в оперативну пам'ять) і не займає місця на диску. Обсяг пам'яті мікросхеми ПЗУ повинен був скласти 64K.

Мінуси очевидні: для зниження ціни, мікросхема ПЗУ із зашитим у ній кодом повинна випускатися величезними тиражами. При виявленні серйозної проблеми виправити її на мікросхемі неможливо. Тільки випустити заново. Дорого, але і це ще не все. Навіть зібрати новий зразок для тиражування - завдання не одного дня.

А що робити з «поганими» мікросхемами? Змусити тих, хто вже купив Mac, тягнути його до дилера? Або користувач повинен власноруч видирати стару мікросхему і впоювати на її місце нову?

Подібні неприємності були передбачені - код в ПЗУ міг бути перехоплений, його можна було повністю замінити на код в системному файлі або додати зціляючий код перед зверненням до ПЗУ або після цього звернення.

QuickDraw

У тулбоксі і в системних утилітах багато фантастичного коду, але найголовніша для системи з графічним інтерфейсом користувача бібліотека - це та, яка малює на екрані комп'ютера. QuickDraw. Бібліотека, написана Біллом Аткінсоном.

QuickDraw не просто малювала, вона змушувала елементи інтерфейсу реагувати на дії користувача: об'єкти на екрані мерехтіли, міняли «колір». Після багаторазової оптимізації і стиснення (вручну) QuickDraw займала зовсім небагато місця. Менше, ніж якийсь калькулятор в наші дні. Велика частина QuickDraw розташовувалася в ПЗУ.

Білла привів в Apple Джеф Раскін, людина, яку вважають «батьком Mac'a». Аткінсон під час навчання в університеті записався на курс лекцій Джефа Раскіна про теоретичні основи графічного інтерфейсу користувача. Найважливішою частиною графічного інтерфейсу, природно, є графічна бібліотека. У лекціях Раскіна така бібліотека називалася QuickDraw. Графічну бібліотеку Mac'a Білл назвав на честь Джефа Раскіна.

З першим Мас'ом поставлялися дві програми - MacPaint і MacWrite. MacPaint, взагалі-то, Білл Аткінсон написав для тестування і налагодження графічної бібліотеки.

Аткінсон дозволив (!) компанії поширювати його MacPaint, якщо за нього Apple не братиме гроші. Apple погодилася. Ось він який, сталевий оскал капіталізму!

Останні дні проекту Macintosh


Термін завершення проекту Macintosh був призначений на середину січня. 24-го, як тепер знають всі, Mac був урочисто представлений публіці, зірвав оплески і відкрив нову еру в історії обчислювальної техніки.

Джобс, за кілька днів до останнього «дедлайну», призначеного розробникам програмного забезпечення Mac'a, зібрав усіх у кімнаті для конференцій. Народ був налаштований ще раз відкласти вихід продукту у великий світ, хоча б на кілька тижнів.

Джобс уважно вислухав усіх і сказав: "За кілька тижнів ви не встигнете зробити те, що не доробили за місяці роботи. Mac треба випускати, зараз або ніколи. З усіма недоліками, які у нього є і які не вдасться виправити в найближчі дні ".

В останній день, о 7:00 ранку, за зразком для тиражування на ПЗУ повинен був приїхати кур'єр. Після цього моменту у команди наступала тижнева відпустка.

Останній перейшов був виявлений в 6:30 того історичного ранку.

Джером Кунен, керівник групи розробників програмного забезпечення проекту Macintosh, вирішив все-таки передати зразок для ПЗУ в належний час. Він вирішив, що демонстрацію можна буде провести без виправлення цього бага (який йому здався дуже серйозним), а потім виправити його обходом у системі.

Джобс, який о 7 ранку примчав в офіс, ознайомився з проблемою і, сказавши «всім спасибі», відправив команду відпочивати до 24 січня. Перші користувачі з перші місяці знайшли в Mac'e безліч проблем, але цю, останню, так і не помітили.

Те, що стало відомо як System Software 1.0, насправді в команді вважалося дуже пізньою бета-версією, 0.97.

COM_SPPAGEBUILDER_NO_ITEMS_FOUND