Difference between revisions of "Переносимость"

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

Latest revision as of 05:50, 28 August 2014

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

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

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