私はRobocodeエンジンの開発者です。Robocodeを多言語にしたいと思っていますが、Scalaはぴったりのようです。ここにScalaプラグインのプロトタイプがあります。
問題: ユーザーは創造的なプログラマーであるため、さまざまな方法で戦いに勝つことを試みる可能性があります。また、ロボットはオンラインデータベースからダウンロードされ、誰でもアップロードできます。したがって、セキュリティのギャップは、ユーザーのコンピュータにセキュリティホールをもたらす可能性があります。Javaで書かれたロボットは、制限されたサンドボックスで実行されています。ほとんどすべてが禁止されています[ネットワーク、GUI、ディスク(制限付き)、スレッド(制限付き)、クラスローダー、リフレクション]。サンドボックスはブラウザアプレットに似ています。SecurityManager、ロボットごとのカスタムClassLoaderなどを使用します...
RobocodeでScalaランタイムをホストする方法は2つあります。
1)サンドボックス内にロボットと一緒にロードします。私たちにとってかなり安全な、好ましい解決策。ただし、ランタイムはリフレクションを使用するため、Scalaランタイムの機能が損なわれます。多分実行時にクラスを生成しますか?スレッドを使用して内部クリーンアップを実行しますか?JVM /内部へのアクセス?(言語能力を制限したくない)
2)Scalaランタイムを信頼できるコードとして使用し、ボックスの外で、JDKと同じレベルのセキュリティを使用します。(悪意のある)ロボットへの可視性。ScalaランタイムAPIは安全ですか?彼らが警備員を持っている方法はありますか?セーフモードはありますか?Scalaランタイムに、ロボット間の通信に悪用される可能性のあるシングルトンはありますか?スレッドをシミュレートできる同時性/スレッドプール/メッセージングはありますか?(Scalaランタイムのセキュリティ監査はありますか?)
3)中間の何か、ランタイムインとアウトのいくつかのクラス。どのクラス/パッケージがロボットに表示される必要がありますか/これは単なるプライベート実装ですか?(これは将来の解決策のようです)
質問: 信頼できるスコープで実行する必要のあるランタイムの部分を他の部分から列挙して分離することは可能ですか?特定のパッケージとクラス?またはより良いアイデア?
安全な解決策につながる具体的な答えを探しています。ランダムな考えは歓迎されますが、授与されません。スカラメールグループで進行中の議論があります。具体的な答えはまだありません。