Переносимость
From EjudgeWiki
Навигация: Главная страница/Система ejudge/Разработка/Переносимость
Текущая версия системы работает только под управлением ОС Linux. В программе используются некоторые непереносимые функции. При переносе системы ejudge на другую платформу семейства Unix трудности могут возникнуть по следующим причинам:
- Программа super-serve использует механизм directory notifications. Этот механизм позволяет программе установить обработчик сигнала, который будет получать управление каждый раз, когда изменяется содержимое некоторого каталога. Механизм directory notifications не является стандартным и реализован (насколько мне известно) только в Linux.
- Программа super-serve использует так называемые "сигналы реального времени" для получения directory notifications. Сигналы реального времени отличаются от обычных сигналов тем, что поддерживается очередь сигналов одного типа. Сигналы реального времени стандартизованы POSIX.
- Все программы используют механизм передачи идентификационной информации о процессе через UNIX-сокет. Linux реализует этот механизм с помощью специальной опции SO_PASSCRED сокета и посылки специального сообщения, содержащего иденификаторы процесса, пользователя и группы. Реализация API передачи идентификационной информации отличается от системы к системе. Например, на FreeBSD соответствующий механизм реализован совсем по-другому.
- Все программы используют возможность передачи файловых дескрипторов через UNIX-сокет. Эта возможность реализована в UNIX-подобных системах практически повсеместно, но отсутствует в Win32.
- Повсеместно используется функция open_memstream стандартной библиотеки Си. Эта функция позволяет связать дескриптор потока (FILE *) с буфером переменного размера в памяти. Данная функция реализована в GNU C Library. Система FreeBSD предоставляет аналогичные возможности, но с другим интерфейсом.
- Вспомогательная программа capexec и библиотека libdropcaps.so используют специальный патч к ядру Linux, доступный на данном сайте, который позволяет лишить процесс возможности выполнять произвольные системные вызовы. Для безопасной работы системы в других операционных системах требуется реализация аналогичной функциональности.