mac haskell execution isolation sandbox

haskell en mac



Ejecución segura de código Haskell no confiable (2)

Hemos estado haciendo esto durante aproximadamente 8 años en lambdabot , que admite:

  • un espacio de nombres controlado
  • Tiempos de espera forzados por el SO
  • módulos de código nativo
  • almacenamiento en caché
  • niveles superiores interactivos concurrentes
  • mensaje de error personalizado devuelve.

Esta serie de reglas está documentada, ver:

El enfoque de seguridad adoptado en lambdabot inspiró el trabajo de extensión del lenguaje Safe Haskell .

Para los enfoques de la extensión dinámica de aplicaciones Haskell compiladas, en Haskell, vea los dos documentos:

Estoy buscando una forma de ejecutar un código Haskell arbitrario de forma segura (o rechazar la ejecución de un código no seguro).

Debe tener:

  • lista blanca de módulos / funciones
  • tiempo de espera en la ejecución
  • restricción de uso de memoria

Capacidades que me gustaría ver:

  • capacidad de matar hilo
  • compilando los módulos a código nativo
  • almacenamiento en caché de código compilado
  • ejecutando varios intérpretes al mismo tiempo
  • tipo de datos complejo para errores del compilador (insted de un mensaje simple en String)

Con ese tipo de funcionalidad sería posible implementar un complemento del navegador capaz de ejecutar código Haskell arbitrario, que es la idea que tengo en mente.

EDIT: Tengo dos respuestas, ambos grandes. ¡Gracias! La parte triste es que no parece haber una biblioteca lista para usar, solo un programa similar. Aunque es un recurso útil. De todos modos, creo que esperaré a que se lance 7.2.1 e intentaré usar SafeHaskell en mi propio programa.


Es probable que GHC 7.2.1 tenga una nueva instalación llamada SafeHaskell que cubra parte de lo que usted desea. SafeHaskell garantiza la seguridad de tipos (por lo que se unsafePerformIO ) y establece un mecanismo de confianza, de modo que una biblioteca con una API segura pero implementada con características inseguras puede ser confiable. Está diseñado exactamente para ejecutar código no confiable.

Para los otros aspectos prácticos (tiempos de espera, etc.), lambdabot como dice Don sería un gran lugar para mirar.