ROS Newsletter97
Выпуск новостей ReactOS №97
Поддержка C++
Одна из самых значимых проблем со сборкой ReactOS в среде Visual Studio была связана с поддержкой C++. В ReactOS компонентом, содержащим наибольшее количество кода на C++, является Проводник, без которого пользователи не смогут увидеть графическую оболочку после завершения загрузки операционной системы. Для обеспечения поддержки C++ мало просто иметь компилятор, способный скомпилировать код на C++, необходимо ещё иметь в системе стандартную библиотеку шаблонов (Standard Template Library, STL) C++. Разработчики, первым языком программирования которых был C++, очень часто используют STL, и в их продуктах практически гарантированно эта библиотека будет скомпонована по-умолчанию, причём чаще всего вне зависимости от того, используется она или нет. Когда какой-либо код собирается при помощи GCC, то используется встроеннаая в GCC реализация STL, однако в Visual Studio используется другой подход. В Visual Studio, библиотека C времени выполнения и STL связаны воедино, так что компоновка одной из них означает компоновку сразу обеих. Всё это приводит к проблемам c собственной реализацией библиотеки C времени выполнения в ReactOS, так что нам было необходимо найти альтернативное решение. И вот, недавно в нашу кодовую базу была импортирована библиотека STLport, которая предназначена для обеспечения ReactOS версией STL, которую можно использовать как совместно с GCC, так и с VC++. Однако это решение также имеет несколько недостатков, и Томас Фабер (Thomas Faber) попытался их исправить. Как результат, теперь почти все компоненты ReactOS можно собрать при помощи инструментария разработчика от Microsoft.
USB
В код компонентов системы, предназначенных для поддержки USB, было добавлено немало исправлений, которые, однако, не вошли в состав версии 0.3.15 из-за заморозки кодовой базы, а авторами большинства из этих исправлений были Йоханнес Андервальд (Johannes Anderwald) и Томас Фабер. Изначально Томас хотел использовать ReactOS при работе над своей диссертацией и изучал возможность воздействия на USB-стек с целью вмешательства в его работу, попутно выявив несколько ошибок в его реализации. В своей тестовой сборке Томас воспользовался встроенной в VirtualBox функцией поддержки сквозной передачи данных с порта USB, и его устройства успешно обнаруживались не только во время работы ReactOS, но даже и во время процесса поиска устройств при запуске системы. В ходе работы над USB Томас обнаружил множество ошибок, информацию о которых вместе с соответствующими протоколами отладки он передал Йоханнесу, чтобы помочь ему в обнаружении и исправлении ошибок. Такой подход к тестированию USB предоставляет довольно интересную возможность по снижению сложности тестирования ReactOS на реальном оборудовании. USB-устройства это, несомненно, реальное аппаратное обеспечение, однако зачастую на реальном компьютере бывает довольно сложно получить отладочные данные от них. Тестирование же устройств при использовании сквозной передачи данных от порта USB в виртуальных машинах позволяет успешно избежать этой проблемы, и, в то же самое время, предоставляет возможность произвести стресс-тестирование ReactOS в условиях наличия множества реальных устройств для порта USB.
NTVDM
Поддержка 16-битных приложений Windows, по мнению разработчиков проекта, никогда не входила в список задач, которые необходимо выполнить для обеспечения совместимости с архитектурой NT5.2, поэтому практически никто и никогда не работал над NTVDM, особенно с учётом наличия в системе множества других, гораздо более важных компонентов. Однако ReactOS – это проект с открытым исходным кодом, и помимо всего прочего это означает, что мы крайне редко отвергаем предложения о помощи в разработке. И вот, когда участник сообщества по имени Александар Андрейевич (Aleksandar Andrejevic) предложил свою помощь в реализации этого компонента, разработчики проекта с радостью предоставили ему возможность работы с нашим SVN-сервером. На настоящий момент он уже создал диспетчер памяти DOS и реализовал возможность загрузки исполняемых файлов. Поскольку в коде компонента отсутствует ещё достаточно много функций, пока что большинство программ завершают свою работу сразу же после запуска, поэтому следующей задачей Александара станет разработка поддержки функций файлового ввода/вывода. Однако приложение "Hello World" уже работает довольно неплохо, и это означает, что на настоящий момент Александар достиг неплохих успехов в своей работе.
Самодостаточность
Обычно, когда в мире программного обеспечения говорят о самодостаточности чего-либо, зачастую имеют ввиду, что это что-то может быть собрано при помощи самого же себя. Для компиляторов это означает, например, что GCC может быть собран при помощи GCC. Для операционных систем это означает, что ReactOS можно собрать в самой ReactOS. По факту ReactOS уже достигла этой стадии своего развития, однако недавние изменения в скрипте configure.cmd всё несколько усложнили. Для решения этой проблемы Сильвейн Петреолль (Sylvain Petreolle) создал реализацию функции GetLocalDateTime инструментария управления Windows (Windows Management Instrumentation, WMI), используемой в новой версии скрипта. Хотя всё то, что делает configure.cmd можно выполнить и вручную, однако всё же это очень полезный скрипт, предназначенный для упрощения процесса сборки системы. Результаты работы Сильвейна над WMI были отправлены в Wine, и впоследствии во время синхронизации кодовой базы они попадут в ReactOS, однако кое над чем всё же предстоит ещё поработать. Как только все проблемы будут устранены, сборка ReactOS в ReactOS будет столь же простой, как сборка ReactOS в Windows.
Newsletters | |
---|---|
30-39 | #30 • #31 • #32 • #33 • #34 • #35 • #36 • #37 • #38 • #39 |
40-49 | #40 • #41 • #42 • #43 • #44 • #45 • #46 • #47 • #48 • #49 |
50-59 | #50 • #51 • #52 • #53 • #54 • #55 • #56 • #57 • #58 • #59 |
60-69 | #60 • #61 • #62 • #63 • #64 • #65 • #66 • #67 • #68 • #69 |
70-79 | #70 • #71 • #72 • #73 • #74 • #75 • #76 • #77 • #78 • #79 |
80-89 | #80 • #81 • #82 • #83 • #84 • #85 • #86 • #87 • #88 • #89 |
90-99 | #90 • #91 • #92 • #93 • #94 • #95 • #96 • #97 • #98 • #99 |