В удивительном мире ИТ существуют проекты, узнав о которых можно сильно поменять свои взгляды на жизнь, реальность и саму разработку. Об одном из таких проектов и будет наш рассказ.
О чем речь
Нет, речь пойдет не про волшебные мухомор.. алкогольный делирий, а всего лишь про очередную сложную штуку для программистов — графический фреймворк.
Но особенный фреймворк, появление которого было шуткой, реальное использование — дичью, а современное применение является уже чистым фанатизмом.
Даже краткая аннотация из википедии легко вгоняет в диссонанс современных MacOS‑разработчиков:
GNUstep — свободная реализация Cocoa (ранее OpenStep) — объектно-ориентированного API (Objective-C) для объектно-ориентированных операционных систем.
Objective‑C (основной язык разработки под MacOS и iOS) и свободная реализация Cocoa (главный UI/UX фреймворк Apple) — расскажите об этом типичному разработчику под Mac, потратившему несколько тысяч долларов на покупку железа Apple и платную подписку на XCode, увидите как у человека начинается нервный тик.
Еще можно троллинга шутки ради сдать тестовое задание на позицию «MacOS Developer»:
#import <AppKit/AppKit.h>
int main(int argc, const char *argv[])
{
return NSApplicationMain (argc, argv);
}
Код выше ничем не отличается от стандартного main()
на обычном маковском Objective-C, при этом никакого отношения к Apple и MacOS не имеет.
Даже если немного усложнить и углубиться в реализацию:
@implementation CalcBrain: NSObject
-(id) init
{
[super init];
result = 0;
enteredNumber = 0;
operation = none;
fractionalDigits = 0;
decimalSeparator = NO;
editing = YES;
face = nil;
return self;
}
Отличия все равно будут минимальны.
Настолько минимальны, что неподготовленный разработчик, не знающий о существовании проекта GNUStep не сможет отличить (с первой попытки).
Вот так выглядит «showcase» GNUStep — тестовое приложение с демонстрацией функционала:
История
Разумеется история появления такого чуда не менее прекрасна и удивительна:
Проект был начат Паулем Кунцем (Paul Kunz) с командой из Стенфордского Центра линейного ускорителя (Stanford Linear Accelerator Center) которым был нужен порт HippoDraw из NeXTSTEP на другую платформу. Вместо того, чтобы переписывать программу с нуля, используя ее архитектуру, разработчики решили переписать слой NeXTSTEP, от которого зависело приложение. Это была первая версия libobjcX.
Именно так выглядит настоящий хардкор в разработке:
взять и переписать часть операционной системы ради портирования одного приложения.
«Как тебе такое, Илон Маск?» (ц)
Справедливости ради стоит заметить, что в те былинные времена графические библиотеки были сильно проще, а само действо происходило в «закрытом НИИ» и на государственные гранты. Что конечно несколько отличается от современных потогонных реалий и перегретого рынка разработки ПО.
Поэтому не удивляйтесь, когда на предложение «переписать часть операционной системы в рамках проекта» вместо одобрения или хотя‑бы обсуждения, вам сразу же вызовут санитаров из дурки.
Разрыв шаблона номер один
На дворе далекий 1994й год, времена модемов, досок BBS, ФИДО и первых персональных компьютеров.
А кое-где уже cуществовал самый настоящий Graphical Interface Builder:
Вот в качестве иллюстрации снимок с ЭЛТ монитора тех лет:
Это не шутка, самый настоящий конструктор интерфейсов был реализован еще в далеком 1988 году:
Gorm (Graphical Object Relationship Modeller) is a graphical user interface builder application. It is part of the developer tools of GNUstep. Gorm is the equivalent of Interface Builder that was originally found on NeXTSTEP, then OPENSTEP, and finally on Mac OS X. It supports the old .nib files as well as its own .gorm file format.
Был создан и работал задолго до рождения большинства читающих сейчас эту статью. Вот вам для иллюстрации еще один снимок тех лет, с местной «косынкой»:
А теперь внимание на даты:
A preview release of NeXTSTEP (version 0.8) was shown with the launch of the NeXT Computer on October 12, 1988
Мне тогда было 5 лет а на дворе был Советский Союз. Для сравнения, вот так примерно в те времена выглядел весь софт в СССР а затем и в РФ:
Так что шаблон «раньше был страшный черный MS DOS и текстовые интерфейсы» только что треснул.
Еще один замечательный и интересный пример:
Видите на снимке выше открытый текстовый документ, с разными шрифтами, кернингом и лигатурой?
Как бы это не было удивительно, но данный функционал был реализован невероятно, даже шокирующе давно — вот так выглядел в 1988 году его далекий предок:
Расширение файла .wn
не что иное как формат текстового процессора WriteNow:
WriteNow is a word processor application for the original Apple Macintosh and later computers in the NeXT product line. The application is one of two word processors that were first developed with the goal that they be available at the time of the Mac product launch in 1984, and was the primary word processor for computers manufactured by NeXT.[2
Так что корни современных текстовых процессоров уходят невероятно далеко в прошлое, дальше чем вы думали.
Разрыв шаблона номер два
Компания NeXT давно закрыта, никакие ее продукты уже давно не продаются, даже само API OpenStep — фактически заброшено, а «свободная реализация» в виде GNUstep на сегодняшний день выглядит как оживший труп из далекого прошлого.
Но нашлись таки
некрофилыинтересные личности, которые в погоне за прибылью откопали и оживили это чудо для использования в реальном продукте.
Ни за что не догадаетесь кто это все затеял и зачем, что лишний раз показывает как мало мы знаем о мире информационных технологий:
Windows Bridge for iOS (codenamed "Islandwood") is an open-source middleware toolkit that allows iOS apps developed in Objective-C to be ported to Windows 10 by using Visual Studio 2015 to convert the Xcode project into a Visual Studio project.[7][9][10] An early build of Windows Bridge for iOS was released as open-source software under the MIT License on August 6, 2015, while the Android version was in closed beta.[7]
This "WinObjC" project is open source on GitHub. It contains code from various existing implementations of Cocoa Touch like Cocotron and GNUstep as well as Microsoft's own code that implements iOS frameworks using UWP methods. It uses a version of the LLVM clang compiler.[11]
Вот такие дела: Microsoft использовал исходный код GNUStep для создания конвертера проектов XCode под Windows. Причем проект очень даже живой.
Но выглядит это.. весьма своеобразно:
Сборка и запуск
Праздник «старой школы» был бы неполным без рассказа о том как собрать и запустить GNUstep своими силами.
Для написания статьи использовался Mageia Linux 9, но инструкции актуальны и для всех других дистрибьютивов и ОС.
Поскольку проект GNUstep находится в полузаброшенном состоянии, не стоит пытаться ставить его из пакетов — в большинстве дистрибутивов эти пакеты не имеют ментейнера и присутствуют «для галочки», просто потому что собираются.
Вместо этого, мы соберем GNUstep непосредственно из исходников.
tools-make
Начать придется со своей специфичной и уникальной системы сборки:
The makefile package is a simple, powerful and extensible way to write makefiles for a GNUstep-based project. It allows the user to write a project without having to deal with the complex issues associated with configuration, building, installation, and packaging. It also allows the user to easily create cross-compiled binaries.
Да, я тоже был удивлен, но наверное не так сильно, поскольку многие старые проекты (например оригинальный CDE) имеют собственные системы сборки.
Забираем это чудо:
git clone https://github.com/gnustep/tools-make.git
Собираем:
cd tools-make
./configure --prefix=/opt/gnustep
make
make install
Как видите тут используется ключ --prefix
- указание на установку в нестандартное место, которое нужно чтобы собираемый проект не попал при установке в системные каталоги.
Еще это означает, что придется добавлять путь /opt/gnustep
в переменные окружения, либо в LD_LIBRARY_PATH либо в PATH:
export PATH=/opt/gnustep/bin:$PATH
libs-base
Следующим шагом собираем commons — общую библиотеку классов:
The GNUstep Base Library is a library of general-purpose, non-graphical Objective C objects. For example, it includes classes for strings, object collections, byte streams, typed coders, invocations, notifications, notification dispatchers, moments in time, network ports, remote object messaging support (distributed objects), and event loops.
Вот что будет нужно иметь в системе из библиотек для сборки:
* ffi (HIGHLY RECOMMENDED)
* icu (HIGHLY RECOMMENDED)
* gnutls (HIGHLY RECOMMENDED)
* libxml2 (RECOMMENDED)
* libcurl (RECOMMENDED)
* libdispatch (RECOMMENDED)
* libavahi (RECOMMENDED for NSNetServices)
* libxslt (RECOMMENDED)
* zlib (RECOMMENDED)
* iconv (OPTIONAL, not needed if you have glibc)
* openssl (OPTIONAL, not needed if you have gnutls)
Стоит помнить, что речь идет об использовании этих библиотек для сборки, поэтому необходимо устанавливать версии пакетов «для разработчиков» — с заголовочными.h файлами.
Забираем исходный код проекта:
git clone https://github.com/gnustep/libs-base.git
Запускаем сборку:
./configure --prefix=/opt/gnustep
make
make install
libs-gui
Следующий шаг — сборка еще одной общей библиотеки, в этот раз графической, отвечающей за интерфейс:
The GNUstep gui library is a library of graphical user interface classes written completely in the Objective-C language; the classes are based upon Apple's Cocoa framwork (which came from the OpenStep specification). These classes include graphical objects such as buttons, text fields, popup lists, browser lists, and windows; there are also many associated classes for handling events, colors, fonts, pasteboards and images.
Тут будет нужно поставить еще несколько зависимых библиотек в систему:
* tiff (REQUIRED)
* jpeg (RECOMMENDED)
* png (RECOMMENDED)
* gif or ungif (OPTIONAL)
* aspell (OPTIONAL)
* cups (OPTIONAL)
* audiofile (OPTIONAL)
* portaudio, v19 which has several API changes previous version
(OPTIONAL)
Каких-либо проблем с этими библиотеками не было, поскольку они все старые и очень стабильные.
Забираем исходники:
git clone https://github.com/gnustep/libs-gui.git
Собираем:
./configure --prefix=/opt/gnustep
make
make install
libs-back
Еще одна библиотека, в этот раз — с реализацией «бекэнда» графического рендера.
Забираем исходный код:
git clone https://github.com/gnustep/libs-back.git
Собираем:
./configure --prefix=/opt/gnustep
make
make install
Перед запуском конечных приложений на GNUstep необходимо выполнить:
defaults write NSGlobalDomain GSBackend libgnustep-xlib
Эта команда установит бекэнд по-умолчанию, сама настройка будет сохранена в каталоге ~/GNUstep
На этом сборка самого фреймворка GNUstep завершена и можно наконец запускать примеры.
Примеры
Выложены в официальный репозиторий Github, вместе с самим проектом GNUstep, все примеры отлично собираются и запускаются.
Забираем исходники:
git clone https://github.com/gnustep/tests-examples.git
Каждый пример является отдельным проектом, собираемым через специфичный make GNUstep, поэтому для сборки необходимо иметь путь /opt/gnustep
в переменной PATH.
Вот так выглядит в работе пример графического редактора:
Также стоит рассказать о еще двух интересных проектах из мира древних и усопших.
Gorm
Тот самый «interface builder», которым я столько восхищался в начале статьи:
Gorm (Graphical Object Relationship Modeller) is a graphical user interface builder application. It is part of the developer tools of GNUstep. Gorm is the equivalent of Interface Builder that was originally found on NeXTSTEP, then OPENSTEP, and finally on Mac OS X. It supports the old .nib files as well as its own .gorm file format.
В запущенном виде он выглядит как-то так:
И сейчас мы будем его собирать, забираем исходный код:
git clone https://github.com/gnustep/apps-gorm.git
Напоминаю про специфичный make
для GNUstep и необходимость наличия /opt/gnustep
в переменной PATH, сама сборка выполняется вот так:
make
К сожалению autotools для этого проекта нет, поэтому попытка использования make install
приведет к установке в системный каталог /usr/lib
, что разумеется не очень надо.
Поэтому для теста было решено запускать бинарник gorm
сразу из места сборки:
export LD_LIBRARY_PATH=/opt/gnustep/lib:./InterfaceBuilder/obj:./GormObjCHeaderParser/obj:./GormCore/GormCore.framework/Versions/0
./Applications/Gorm/Gorm.app/Gorm
За что я конечно буду гореть в аду для программистов. Но потом.
Projectcenter: IDE для GNUstep
Да, у них в могиле есть даже свой собственный IDE:
IDE — Integrated Development Environment. PC manages code and builds applications, frameworks and libraries, use GORM for Interface editing.
И его тоже я смог собрать и запустить, выглядит в работе он как-то так:
Забираем:
git clone https://github.com/gnustep/apps-projectcenter.git
Сборка аналогична описанной выше сборке проекта Gorm, по тем же причинам я снова произвел «закат солнца вручную» для запуска:
export LD_LIBRARY_PATH=/opt/gnustep/lib:./Framework/ProjectCenter.framework/Versions/0.7.0
./ProjectCenter.app/ProjectCenter
Код
Думаю читателям будет интересно увидеть, как выглядит реальный код на Objective-C для работы с GNUstep.В качестве примера был взят тестовый проект калькулятора, который как раз запущен на первом скриншоте данной статьи.
Ниже немного порезанный код этого калькулятора:
#include <Foundation/Foundation.h>
#include <AppKit/AppKit.h>
#include "CalcFace.h"
#include "CalcBrain.h"
@implementation CalcFace: NSWindow
-(id)init
{
int i;
// Display
display = [[NSTextField alloc] initWithFrame: NSMakeRect (40, 84, 182, 24)];
[display setEditable: NO];
// [display setScrollable: YES];
[display setBezeled: YES];
[display setDrawsBackground: YES];
[display setAlignment: NSRightTextAlignment];
// Numbers
buttons[0] = [[NSButton alloc] initWithFrame: NSMakeRect (77, 3, 34, 24)];
[buttons[0] setButtonType: NSToggleButton];
[buttons[0] setTitle: @"0"];
[buttons[0] setTag: 0];
[buttons[0] setState: NO];
[buttons[0] setAction: @selector(digit:)];
[buttons[0] setKeyEquivalent: @"0"];
buttons[1] = [[NSButton alloc] initWithFrame: NSMakeRect (114, 3, 34, 24)];
[buttons[1] setButtonType: NSToggleButton];
[buttons[1] setTitle: @"1"];
[buttons[1] setTag: 1];
[buttons[1] setState: NO];
[buttons[1] setAction: @selector(digit:)];
[buttons[1] setKeyEquivalent: @"1"];
..
buttons[12] = [[NSButton alloc] initWithFrame: NSMakeRect (3, 30, 34, 24)];
[buttons[12] setButtonType: NSToggleButton];
[buttons[12] setTitle: @"+"];
[buttons[12] setTag: addition];
[buttons[12] setState: NO];
[buttons[12] setAction: @selector(operation:)];
[buttons[12] setKeyEquivalent: @"+"];
...
buttons[17] = [[NSButton alloc] initWithFrame: NSMakeRect (3, 3, 71, 24)];
[buttons[17] setButtonType: NSToggleButton];
[buttons[17] setTitle: @"="];
[buttons[17] setState: NO];
[buttons[17] setAction: @selector(equal:)];
[buttons[17] setKeyEquivalent: @"="];
// Window
[self initWithContentRect: NSMakeRect (100, 100, 225, 111)
styleMask: (NSTitledWindowMask | NSMiniaturizableWindowMask)
backing: NSBackingStoreBuffered
defer: NO];
[self setInitialFirstResponder: buttons[17]];
[self setDefaultButtonCell: [buttons[17] cell]];
for (i = 0; i < 18; i++)
{
[[self contentView] addSubview: buttons[i]];
[buttons[i] release];
}
[[self contentView] addSubview: display];
[display release];
[self setTitle: @"Calculator.app"];
[self center];
return self;
}
-(void) dealloc
{
[super dealloc];
}
-(void) setBrain: (CalcBrain *)aBrain
{
int i;
for (i = 0; i < 18; i++)
[buttons[i] setTarget: aBrain];
}
-(void) setDisplayedNumber: (double)aNumber
withSeparator: (BOOL)displayDecimalSeparator
fractionalDigits: (int)fractionalDigits
{
if (displayDecimalSeparator)
{
[display setStringValue:
[NSString stringWithFormat:
[NSString stringWithFormat:
@"%%#.%df", fractionalDigits],
aNumber]];
}
else // !displayDecimalSeparator
[display setStringValue: [NSString stringWithFormat: @"%.0f", aNumber]];
}
-(void) setError
{
[display setStringValue: @"Error"];
}
- (void)applicationDidFinishLaunching: (NSNotification *)aNotification
{
CalcBrain *brain;
NSMenu *mainMenu;
NSMenu *menu;
NSMenuItem *menuItem;
mainMenu = AUTORELEASE ([NSMenu new]);
// Info
[mainMenu addItemWithTitle: @"Info..."
action: @selector (orderFrontStandardInfoPanel:)
keyEquivalent: @""];
// Edit SubMenu
menuItem = [mainMenu addItemWithTitle: @"Edit"
action: NULL
keyEquivalent: @""];
menu = AUTORELEASE ([NSMenu new]);
[mainMenu setSubmenu: menu forItem: menuItem];
[menu addItemWithTitle: @"Copy"
action: @selector (copy:)
keyEquivalent: @"c"];
[menu addItemWithTitle: @"SelectAll"
action: @selector (selectAll:)
keyEquivalent: @"a"];
[mainMenu addItemWithTitle: @"Hide"
action: @selector (hide:)
keyEquivalent: @"h"];
[mainMenu addItemWithTitle: @"Quit"
action: @selector (terminate:)
keyEquivalent: @"q"];
[NSApp setMainMenu: mainMenu];
brain = [CalcBrain new];
[brain setFace: self];
[self setBrain: brain];
[self orderFront: self];
}
@end
А вот так выглядит главный метод, отвечающий за запуск приложения:
#import <Foundation/Foundation.h>
#import <AppKit/AppKit.h>
#import "CalcFace.h"
int main (void)
{
ENTER_POOL
CalcFace *face;
NSApplication *app;
app = [NSApplication sharedApplication];
face = [CalcFace new];
[app setDelegate: face];
[app run];
LEAVE_POOL
return 0;
}
Совместимость
После размещения статьи на ЛОРе, читатели задали интересный вопрос по поводу совместимости с оригинальной и современной Cocoa.
Был взят минимальный пример и немного адаптирован:
#import <Cocoa/Cocoa.h>
int main()
{
[NSAutoreleasePool new];
[NSApplication sharedApplication];
[NSApp setActivationPolicy:NSApplicationActivationPolicyRegular];
id menubar = [[NSMenu new] autorelease];
id appMenuItem = [[NSMenuItem new] autorelease];
[menubar addItem:appMenuItem];
[NSApp setMainMenu:menubar];
id appMenu = [[NSMenu new] autorelease];
id appName = [[NSProcessInfo processInfo] processName];
id quitTitle = [@"Quit " stringByAppendingString:appName];
id quitMenuItem = [[[NSMenuItem alloc] initWithTitle:quitTitle
action:@selector(terminate:) keyEquivalent:@"q"] autorelease];
[appMenu addItem:quitMenuItem];
[appMenuItem setSubmenu:appMenu];
id window = [[[NSWindow alloc] initWithContentRect:NSMakeRect(10, 10, 200, 200)
styleMask:NSTitledWindowMask backing:NSBackingStoreBuffered defer:NO]
autorelease];
[window setTitle:appName];
[window makeKeyAndOrderFront:nil];
[NSApp activateIgnoringOtherApps:YES];
[NSApp run];
return 0;
}
И.. оно заработало! Пусть и с минимальными переделками, вот так выглядит запущенное приложение на Linux:
Современность
Разработка GNUstep как ни странно до сих пор продолжается, так выглядит наверное самое популярное приложение (из еще актуальных) на этом фреймворке:
Но только все графические примитивы и паттерны использования, заложенные в GNUstep — устарели, слабо представляю как такой UI/UX возможно соотнести с современным использованием десктопа, даже профессионального.
А вы смогли бы пользоваться таким ПО каждый день?
Версия для.. Windows
Ну и наконец последний разрыв шаблона на сегодня:
вы можете легко и просто поставить GNUstep.. на Windows.
Вот так это выглядит в работе:
Даже готовый инсталлятор есть, так что ничего не помешает «прикоснуться к прекрасному с минимальными усилиями».
Эпилог
Разумеется как NEXTstep так и GNUstep ныне являются чистой историей, поскольку даже заложенные в них подходы к построению UI/UX — концептуально устарели. Устарели настолько, что пользоваться таким интерфейсом даже автору (видевшему многое) — откровенно тяжело.
Реальное практическое использование фреймворка GNUstep для разработки современного ПО честно говоря — на уровне фантастики, поэтому остается только для кино и самых ярых фанатов.
Тем не менее, о существовании такого проекта стоит знать, хотя‑бы для понимания — насколько далеко в прошлое уходят корни современных технологий.
Но рабочие станции конечно были очень красивые, для тех-то лет:
P.S.
Это немного отцезурированная версия статьи, более трешевый оригинал которой доступен в нашем блоге. Скриншот GNUstep в работе был также опубликован на ЛОРе, что вызвало интересную дискуссию и внесение ряда дополнений в статью.
С учетом присутствия на Хабре живых свидетелей тех лет и описываемых событий, с радостью дополню текст деталями, известными только им — пишите;)
0x08 Software
Мы небольшая команда ветеранов ИТ‑индустрии, создаем и дорабатываем самое разнообразное программное обеспечение, наш софт автоматизирует бизнес‑процессы на трех континентах, в самых разных отраслях и условиях.
Оживляем давно умершее, чиним никогда не работавшее и создаем невозможное — затем рассказываем об этом в своих статьях.
Комментарии (20)
remirran
27.09.2024 14:02+3Очень долго сидел на AfterStep, прямом идеологическом потомке. Изучил много утилит по тонкой настройке рабочего стола. Только
xsetroot
для бэкграунда чего стоит. Или заменить шрифт в приложении через.Xresources
. Интересно, сейчас эти знания всё еще актульны?alex0x08 Автор
27.09.2024 14:02+2Да, .Xresources до сих пор используется в современном Xorg а xsetroot все также позволяет установить обои.
unreal_undead2
27.09.2024 14:02Только, насколько понимаю, реально ресурсы используются только в Xt и том, что на нём основано. GNOME/KDE приложения вряд ли берут из них хоть какие то настройки.
unreal_undead2
27.09.2024 14:02Долго и достаточно активно пользовался WindowMaker (общался в мэйллисте, безуспешно пытался пропихнуть свой патчик), какое то время что-то из GNUStep (файловый менеджер и т.п.) тоже стояло, немножко игрался с Gorm. В целом выглядело интересно, но сил любителей на поддержку явно не хватало.
NeoCode
27.09.2024 14:02Я тоже когда-то пытался ставить Gnustep на винду (и вроде даже поставил). Меня интересовал язык ObjectiveC, его уникальная в сравнении с другими языками система "сообщений" вместо классических "методов".
checkpoint
27.09.2024 14:02+4Баловство. Мне тут при разработке очередного прибора потребовалось быстро визуализировать получаемые с него данные, ну то бишь гарафик рисовать в реальном времени. Всю разработку я веду на Фре, и вообще я нифига не прикладник, гуёвых приложений почти никогда не писал, но вспомнил про Tk которым немного баловался еще в студенческие годы. Более того, я вспомнил, что когда-то для Perl5 был модуль Tk. Выяснилось, что модуль этот до сих пор поддерживается и даже запихнут в репозиторий Фрюхи (то, что есть на CPAN-е под фрю с пол пинка не собирается). И вот через пяднадцать минут готова прикладуха которая одинаково работает что на Фре, что на Линухе, что на Винде. На Винде, Карл! Софтина убогая, кривая, но задачу выполняет - заказчик может её запускать на своих виндовых компах, а я на своих юниксовых. И все довольны.
Так выглядит Тк
alex0x08 Автор
27.09.2024 14:02Поскольку так получилось, что в TCL/TK я тоже немного понимаю, добавлю что:
1) Tk и Perl связаны очень долгой историей, поскольку Perl второй после Tcl язык где Tk всегда активно использовался. Для примера отрывок из статьи 2001го года:
An important advantage of using the pTk (Perl/Tk) combination is that you can write truly portable cross-platform GUI applications– applications that will work similarly across Win32, Macintosh, Linux, and even the AS/400!
2) Ставить из СPAN этот поддерживающий пакет — идея не очень если нужна портабельность. Надо ставить все же системный пакет (p5-Tk для FreeBSD), чтобы не было конфликта версий с Tk. Вся связка Perl + Tk + p5-Tk ввиду историчности и популярности присутствует в виде готовых пакетов наверное в любой ОС и дистрибутиве.
checkpoint
27.09.2024 14:02+1Статья от 2001 года, на которую Вы ссылаетесь, очень хороша, но для многих здешних обитателей звучит как "голос из прекрасного далёка". Определенно, надо писать новую! :)
mentin
27.09.2024 14:02+3В такой работе главное бесшабашность. Я где-то в 95ом похожим образом перенес подмножество Win API на Мак. Просто у компании было много однообразных графических программ написанных для Win 3.11 и позже 95, на Borland C++ OWL, а заказчик захотел их, но на Макинтоше. Я был студентом, работающим на частичную ставку, в компании не было серьезных разработчиков меня остановить, и компания позволила мне переносить Win API / OWL, и не очень часто спрашивала где результат. Через полгода что-то получилось, ещё через пару месяцев переносилось всё автоматически, и код и ресурсы. Сейчас, думаю, видя список проблем, наверное не взялся бы.
alex0x08 Автор
27.09.2024 14:02+1Borland C++ OWL
Что характерно не похоронили до сих пор:
Shortly after Borland ended the development of OWL, maintenance was taken over by a group of users led by Yura Bidus. This effort evolved into the OWLNext[1] open-source project currently hosted at the SourceForge site. OWLNext is a modern update and extension of OWL with support for the latest Windows versions and modern C++ compilers from Microsoft and Embarcadero.
Удивительные вещи творятся:
32-bit and 64-bit targets for Windows XP/Vista/7/8/10/11.
В который раз убеждаюсь что софт это в первую очередь идея, а идею хрен убьешь.
Testman2023
27.09.2024 14:02+2Поскольку проект GNUstep находится в полузаброшенном состоянии, не стоит пытаться ставить его из пакетов — в большинстве дистрибутивов эти пакеты не имеют ментейнера и присутствуют «для галочки», просто потому что собираются.
Вроде не бросали.
GNUstep framework на Window Maker. Рекламировать дистр не буду.
В Mageia Cauldron свежая версия gnustep-make-2.9.2-2.mga10.x86_64.rpmalex0x08 Автор
27.09.2024 14:02Вроде не бросали.
Терзают смутные сомнения, что поддержки Wayland все же ожидать не стоит )
В Mageia Cauldron свежая версия gnustep-make-2.9.2-2.mga10.x86_64.rpm
Когда там релиз 10й версии? Чего-то затягивать начали с новыми выпусками, из года в год все длиннее релизный цикл.
Testman2023
27.09.2024 14:02Терзают смутные сомнения, что поддержки Wayland все же ожидать не стоит )
Ну дык...- Так ить...- А как если...
x11-server-xwayland-22.1.9-1.5.mga9.x86_64.rpm
https://wiki.mageia.org/en/Mageia_10_Development
pavel_raskin
1994 год? 1988? Если рвать шаблоны и шокировать, то уж до конца: Xerox Star - 1981 год, Xerox Alto - 1973 год: мышь, оконный графический интерфейс, редакторы типа WYSIWYG и всё такое...
alex0x08 Автор
Поскольку я немного понимаю в старых системах, замечу что история с NexT и GNUstep — отличается. Отличается в первую очередь тем, что существенная часть кодовой базы и оригинальных концептов пробралась в настоящее без существенных изменений.
Xerox все же была исследовательской системой, купить и использовать которую дома или на работе обычному человеку было мало реально. А рабочие станции NeXT с самого начала были коммерческим продуктом, они продавались и использовались.
Самым известным фактом использования NeXT для разработки является создание Doom:
pavel_raskin
Если рассуждать о наследии кода в современных продуктах, вспоминая о разработках NexT, то справедливо вспомнить и системы BSD (ставшие основой для NexT), а они, в свою очередь, пускают корни в намного более давние времена. Да и сложно сказать, как развивались бы оболочки ОС, если Гейтс или Джобс с коллегами вдруг не увидели созданного в стенах Xerox.
Ни сколько не сомневаюсь в Вашей компетенции и всегда с удовольствием читаю всё что публикуете о старых системах. Спасибо.
unreal_undead2
Первый браузер - явление того же порядка. Жалко, что в музее Яндекса на чёрном ящике не стоит ни то ни другое.