今週のContest Management System

CMS (Contest Management System) の最近の動向について書いてみようかなと思います

クロアチアと日本での採用

CMSが次の大会で採用されました。

  • クロアチアの3段階ある国内大会
  • 日本の国内大会のうち、代表選抜合宿

クロアチアでの採用を報告したメールによると、クロアチアで独自に以下の機能を追加したとのことです。

  • 解析モード
  • 複数のコンテストの同時開催
  • クロアチア語用のローカライゼーション

また、日本の大会でのCMSの導入はqnighyが主導して行いました。日本で利用するにあたって、次のような機能を追加しました。

  • 双方向のやりとりをする2つのプログラムを提出させる課題タイプ
  • より柔軟なグルーピングのできるテストグループ型のスコアタイ
  • Imojudgeで使われる問題フォーマットをインポートするプログラム
  • 提出の詳細ページからソースコードを閲覧できる機能

クロアチアの独自機能も、日本の独自機能も、現在は本家にはマージされていませんが、そのうちパッチが作成されてマージされることでしょう。

サンドボックスに送られるシグナル番号

サンドボックス内のプログラムが何らかの間違った挙動によってシグナルを受け取った場合(例えば、プロセス自らがabort()で終了しようとした場合)に、それらが全て11番シグナル(SIGSEGV)に変換されるというバグが報告されました。

この原因は、cgroupsを利用したサンドボックス内で動作しているユーザープログラムが、プロセス番号1として扱われていることに由来しているそうです。プロセス番号1は通常のプロセスグループ上ではinitにあたる番号であり、1番プロセスはシグナルに対する既定の動作をもたないために、他のシグナルを受け取ったときに未定義の動作が実行され、それがSEGVを引き起こすのだとbblackhamは説明しています。

これに関連して、プロセスが落ちた理由をどれだけ詳細にコンテスタントにフィードバックすべきかという議題が生じました。もしシグナル番号をそのまま通知してしまえば、ユーザーはより多くのカスタムフィードバックを受けられる(各テストケースあたり32bit整数1つ分のデータが得られる)ことになり、入出力データをリバース・エンジニアリングできる機会が増えてしまいます。そこで、「MLE/TLE/RE」というような原因別の分類をすることをveluca93は提案していますが、これがどのような結論になるかはまだわかりません。