Переносимость

From EjudgeWiki
Revision as of 05:50, 28 August 2014 by Cher (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Навигация: Главная страница/Система ejudge/Разработка/Переносимость

Текущая версия системы работает только под управлением ОС Linux. В программе используются некоторые непереносимые функции. При переносе системы ejudge на другую платформу семейства Unix трудности могут возникнуть по следующим причинам:

  • Все программы используют механизм передачи идентификационной информации о процессе через UNIX-сокет. Linux реализует этот механизм с помощью специальной опции SO_PASSCRED сокета и посылки специального сообщения, содержащего иденификаторы процесса, пользователя и группы. Реализация API передачи идентификационной информации отличается от системы к системе. Например, на FreeBSD соответствующий механизм реализован совсем по-другому.
  • Все программы используют возможность передачи файловых дескрипторов через UNIX-сокет. Эта возможность реализована в UNIX-подобных системах практически повсеместно, но отсутствует в Win32.
  • Повсеместно используется функция open_memstream стандартной библиотеки Си. Эта функция позволяет связать дескриптор потока (FILE *) с буфером переменного размера в памяти. Данная функция реализована в GNU C Library. Система FreeBSD предоставляет аналогичные возможности, но с другим интерфейсом.
  • Вспомогательная программа capexec и библиотека libdropcaps.so используют специальный патч к ядру Linux, доступный на данном сайте, который позволяет лишить процесс возможности выполнять произвольные системные вызовы. Для безопасной работы системы в других операционных системах требуется реализация аналогичной функциональности.