вівторок, 9 червня 2015 р.

вступ 1


в цьому продовженні вступу, вирішив написати трохи про user space'ну частину моєї планованої системи (далі просто - системи, або ОС, або ant , ну тобто, я не робитиму постійно уточнень шодо її планованого статусу, її ненаявности чи неповноти).
це цікаве питання, бо якшо навіть відкинути весь скептицизм шодо можливости написати систему одному чи просто - скептицизм шодо саме моїх можливостей, то всеодно, постає резонне питання: ну гаразд, а які застосування твоя система ганятиме? ти намагатимешся склонувати WinApi в усій його повноті шоб мати можливість виконувати весь той космос Windows'івських програм, як це намагаються робити певні проєкти, чи ти може надумав свій api замутити і, як наслідок, тобі треба тоді ще й весь користувацький простір наповнювати... або створювати екосистему, загукувати так би мовити розробників з усіх країв писати їхні проги під твою ось.
звичайно, шо ні. я не такий наївний, може й наївний, але не настільки. шодо другого варіанту, тобто "свого" api для юзер простору, - це одразу очевидно нереалістичний варіант - жодна найталановитіша й найпрацьовитіша людина не напише ядро і всі системні бібліотеки і всі найпотрібніші юзерські прогамні набори (наскільки талановитий і працьовитий є я, залишимо на осуд майбутнім користувачам). а головне, це не є необхідне шоб дати своїй системі якесь використання. і про це трохи далі. шо ж до першого варіанту, тобто відтворення WinApi, то тут відповідь дешо інша, але в головному - та сама: це нереально і я не маю навіть такого наміру. бо навідміну від тих, хто намагається там "конкурувати" і бути "альтернативою", це просто смішно, я просто люблю Windows, і не хочу нічого конкурувати чи ще шось. я намагаюсь відтворити в своїй системі ті концепції NT, бо мені це просто цікаво. того я не маю жодних релігійних настроїв робити клона на рівні api в тому числі, з практичної ж точки зору - це й нереально.і все просто - то дуже великий і складний набір. але, в своїх планах я маю намір імплементувати певне так би мовити базове ядро WinApi. і це, звичайно робиться, бо цей інтерфейс є для мене звичним, правильним і таким шо логічно вписуватиметься в загальну картину. а оскільки це буде лише базова підмножина, то й імплементувати його буде реалістичніше.
тут я підходю до основної теми цього параграфу (чи як його назвати). це стосується концепції NT, так званих підсистем середовища. саме за допомогою широкої підтримки цієї концепції, я намагатимусь рішити проблему нестачі застосунків для моєї системи.
зараз це бачиться так. буде одна обов'язкова юзерспейсна підсистема (підсистема середовища далі буде скорочено ПС), ця базова ПС, за замовчуванням так би мовити (Default subsystem, dss), вона якраз і базуватиметься на тій базовій підмножині з WinApi про яку я згадував раніше. вона буде доступна завсіди, і всім програмам з різних ПС. за її допомогою планується написати наприклад базовий набір системних утиліт, які формально не будучи частиною ОС, все ж будучи дуже потрібними, будуть частиною дистрибуції. тобто йтимуть як інтегральна частина релізу. це не native api, тобто ntdll, ця, логічно є на рівень нижче. дефолтна підсистема це мій мінімалістчний внесок в юзерспейс. бо я концентруюся на створення ядра.
а от решта, решта це будуть вже наявні, тобто імплементовані інтерфейси, і програми під них. виникає питання: які саме такі інтерфейси наявні, шо вони можуть стати в цій архітектурі повноцінними ПС? ну, читач який розуміє про шо тут ідеться, вже давно здогадався - мова йде про posix. адже імплементації саме цього інтерфейсу є в активному обігу. тобто кажучи коротоко, в користувацькому просторі, я вирішив покластися на posix, шоб спростити собі завдання зробити систему якою ще люди зможуть користуватися ща признеченням. хоч як мій віндовс орієнтований погляд дивиться на цей посикс, але саме він є в доступі, так, шо я можу його адаптувати і відкрити для своєї системи чималий простір програм написаних під нього. відкривши таким чином свою систему користувачам.
тепер, замість створення api, його імплементації, і написання кожної програми під потреби користувача, мені треба "втесати" наявну імплемегтацію posix в рамки ПС моєї системи і втесати - означає серед іншого, зробити так, шоб посиксні програми могли вільно виконуватися на твоїй системі. який це рівень сумісности? рівень вихідних кодів чи може бінарний? :) звичайно перше скоріше, про ефективне підганяння під чиєсь abi, з усіма місцевими фокусами і містикою - це нереалістично. хоча було б цікаво, наприклад зробити можливість пользунам ганяти на системі одразу їхні бінарні програми з лінукса якого небудь. нативно і без компіляції. зараз це бачиться як занадто складне. шо планується як реалістично складне - це брати якусь bsd-ліцензовану libc з компанією, і на їхній базі, вносячи потрібні зміни створювати реалізацію посиксної підсистеми на твою ОС. а далі, вже буде видно чи вимагатимуть окремі програми - я маю на увазі користувацькі програми запиляні під посикс - буде видно чи вимагатимуть вони і як багато якшо так, змін в вихідних кодах. але це реалістичніше за бінарну сумісніть. звичайно, не все буде гладко, бо посикс хоч і мав на меті яку таку портованість, навряд він цього досяг, існує купа несумісностей. ну і знову посикс покриває далеко не все. от я наприклад не уявляю поки, наскільки складно було б перенести під мій посикс такий програмний комплекс як Xorg.
до речі кажучи за графіку. це одна з причин чого я бачу повне відтворення віндовсівського юзерського апі нереалістичним. графіка це дуже цікава штука, це цілий свій космос. але в тому то й справа, шо навіть на рівні елементарної графічної системи це вже непосильний труд якшо ти не концентруєшся тільки на ньому. не кажучи вже про всі ці 3D речі чи відео кодеки. того, наприклад, мені думається, шо я навряд зміг би навіть gdi відтворити. тож, з графікою в мене туго. і покишо моя система - це текстовоорієнтований командний інтерфейс. одним словом - канцоль. :D якшо це все виходитиме, то графіку додаватимуть зацікавлені учасники. кажучи за яких, згадується питання ліцензування. тут нічого ще я не знаю, але шодо посиксної ПС можна сказати - оскільки, як я зазначив я братиму це від інших і воно буде bsd-ліцензоване, то, ясно, шо таким буде і моя посиксна ПС. я не належу до порушників опортуністів.))) ну і тут же проглядається ще дещо - так я не в захваті від gpl, того й балакаю за bsd'шну версію як вибір попри меншу поширеність і, як наслідок, можливу розвиненість, можливо. але вся ця квазірелігійна волокіта мене не цікавить взагалі і мені не хочеться тут це піднімати. я згадав за це для повноти опису, оскільки наче як це було треба уточнити.
отже от це мої думки з приводу частини користувацького простору. є ще сесійний менеджер, і багато чого іншого. сьогодні я торкнувся саме теми ПС. а покишо я намагаюсь розгребтися з стартом в сьомому армі, з безпечним режимом і небезпечним режимом :D вивчаю інструменти, і покишо це ще тільки зародок завантажувача в планах.))) ще ніпрошо писати. але, сподіваюсь діло йтиме як треба. :)

середа, 4 березня 2015 р.

вступ 0

вирішив зробити блог (нічого не знаючи за це), шоб писати сюди свої думки, міркування, описувати процес, робити хроніку, створення, якшо получиться, :D свого проєкту. проєкту зі створення операційної системи загального призначення, базованої на концепціях і ідеології Windows NT. типу щоденника розробника, звітів там про те як же воно робиться і шо получається, а шо ні. шоб це було доступно не лише мені, раптом з цього шось вийде і це ще комусь буде цікаво. навіть якшо нікому не буде цікаво, то принаймні я матиму інтернет бекап цієї історії.
зараз ще мало можна сказати за цей проєкт. та й допис цей більше пробний - просто шоб побачити як воно робе. бо в принципі писати на планшеті блог - незручно. і це дуже м'яко кажучи! зараз вдома нема інтернету окрім як на планшеті. але головне - системи ще нема! :D така невеличка малість. того ну шо можна сказати на цьому початку. лише коротко про плани. це робота для себе для душі. не для заробляння. просто дуже цікаво. дуже сильний виклик. і насправді серед купи можливих напрямків, спеціалізацій оце - створення операційної системи - на вершині інтересів, найпривабливіше для мене. оскільки це проєкт на роки і надскладний, тут багато чого ще навіть не усвідомлено, багато чого не визначено і з визначеного може багато разів мінятися. тож треба мати на увазі.
шо визначено. вибрані архітектури процесорів на які буде цілитися система. вибрані саме вони переважно з міркувань їхньої релевантности для сучасного користування. тобто ті які вживаються розвиваються і ті з них, які доступні мати собі вдома розробницьку машину шоб це все робилося практично а не тільки мріялося. отже того маємо x86, 32 і 64 бітні варіанти, armv7 з перспективою розширення до armv8, mips 32 і 64 бітні, і ppc, теж 32 і 64 бітні. дуже б хотілося мати можливість спробувати себе на itanium. але, зрозуміло, доступність майже нульова, і гірше - загрозлива перспектива припинення розвитку процесора. тож відкладається на майбутнє, хоча мабуть найпривабливіша цільова архітектура для мене. також sparc. але те саме - доступність не дозволяє. решта цікавих архітектур випадає просто бо їх позакривали. alpha наприклад. дуже цікаво але вже історія.
з згаданих архітектур я маю кілька машин доступних мені на x86, маю навіть тільки 32 бітний четвертий пентіум з 2004 року. для ppc маю старенький iMac g5 з PowerPC 975FX, невпевнений щодо правильности номера моделі але це неважливо, теж 2004 року, одноядерний, зато 64 бітний. шось новіше і багатоядерне розглядаю як розробницьку ціль але це на майбутнє, шось накшталт Mikrotik RouterBoard 850Gx2, знову ж, невпевнений шо модельний номер правильний, планшет не комп, і 3g інтернет не найкращий спосіб діставати всю інфу під руку, ось пишу по памяті і точні цифри моделей можу плутати. там, в роутерборді двоядерний qoriq наче як на 1 ГГц від freescale (це, звичайно, я розмріявся, - частота - 500MHz, ось дивився сьогодні). але цього зараз не маю. ну а з армівської сім'ї маю два рішення -  розробницькі плати у вигляді mini PC, одноядерний SoC з Cortex-A8 в beaglebone black, і Cortex-A7 двоядерний в Cubieboard 2. AM3358 і A20 від TI і Allwinner відповідно. тобто є однопроцесорне і двопроцесорне рішення, к'юбіборд по конфігурації дуже нагадує ту яка всередині планшета на якому пишу (якшо звичайно знехтувати різницею між 7мим і 9тим кортексами). ну і нарешті mips. не знаю чого але дуже цікава мені архітектура, непагано було б саме з неї почати. але нажаль на неї не маю жодної машини. і грошей не маю))) Imagination, власник міпс архітектури, випустив цікаву плату mips creator ci20, з двоядерним mips32 процесором всередині сока. ось на це й цілю. все добре, крім того шо не доставляють вони в Україну це диво інженерної мислі британських вчених і майстерности китайських виробників. покишо. і їхнє soon, виглядає дуже непереконливо. не знаю чи взагалі доставлятимуть. тож з міпсом покишо лишається теоретизувати. але оскільки це просто колосальна робота і може навіть і непосильна для 1єї людини, починати треба з чогось одного, попри переносність в дизайні, практична імплементація всеодно йтиме поштучно. тож почни а там побачиш шо ти можеш. роботи вистачить. почати я рішив таким чином з арма. хоча вже казав чогось особливо хотів би з міпса. отже з арма, з одноядерного варіанта, без smp , шо логічно, цільова платформа - beaglebone black.
ось і шоб нотувати процес, шоб воно відобразилося в історії, хай навіть для себе, рішив, шо крім строгого документування треба вести типу шось як щоденник. а потім подумалося шо і блогувати було б непагано. було б шо. саме для цього я прийшов сюди і саме для цього почав цей блог. сподіваюсь далі буде.