Código Administrado y No Administrado. Una Visión General

Al igual que para las aplicaciones empresariales y de escritorio, en el desarrollo de software para dispositivos móviles tenemos dos opciones de esquemas de codificación: código administrado y no administrado. Aunque esta terminología es propia de la plataforma .NET de Microsoft, estos conceptos también aplican a otras plataformas.

Código Administrado
Código administrado es un término que describe al código de una aplicación que corre o se ejecuta bajo un ambiente administrado. Esto significa que el código de la aplicación no corre directamente sobre el sistema operativo del dispositivo, sino que en vez de ello, se apoya de un ambiente de ejecución (runtime engine) para ser ejecutado. El ambiente de ejecución se encarga de asignar recursos y servicios de soporte como seguridad, administración de la memoria, etc., por lo que decimos que la aplicación está siendo administrada por el ambiente de ejecución. Contar con un ambiente administrado nos permite tener aplicaciones que son independientes tanto del procesador como del sistema operativo.

Código No Administrado
Código no administrado es aquel que al compilarse genera un binario que es ejecutado directamente por la máquina, fuera de algún ambiente de ejecución, y que por ende no obtiene servicios de soporte a través del mismo.

¿Esto significa que la implementación es insegura y que hace mal uso de la memoria? No necesariamente, es sólo que si el desarrollador requiere de estos servicios, debe de hacer peticiones explicitas al sistema operativo, o a componentes COM que implementen los servicios deseados.

¿Cuál es la Mejor Opción?
No existe una respuesta única a esta pregunta, todo depende de las necesidades específicas de cada desarrollo. En la manera que sea posible, es recomendable desarrollar utilizando código administrado. Además de su portabilidad, el código administrado típicamente es más seguro, estable, rápido de desarrollar y fácil de mantener. Todo esto puede ser englobado en una sola frase: mejora en la productividad.

Sin embargo, existen desarrollos que solamente pueden ser implementados como código administrado, como es el caso de los controladores de dispositivos (device drivers).

Si por la naturaleza del proyecto es imposible usar código administrado al cien por ciento, puede ser recomendable combinar ambos esquemas: se desarrollan como código no administrado los componentes que así lo requieran, y el resto se implementa como código administrado. Las tecnologías: Platform Invoke (P/Invoke), COM interop y C++ interop pueden ser de utilidad en este caso.

En cuanto a desempeño de la aplicación se refiere, los mejores resultados se pueden obtener usando código no administrado. Otra vez, esto nos puede llevar a un esquema combinado, donde los componentes sensibles a desempeño se implementen como código no administrado, y el resto como código administrado.

Herramientas para Ambos Esquemas
En el caso de la plataforma .NET, tradicionalmente los desarrolladores han requerido de una herramienta para código administrado, y otra para código no administrado. Siendo Visual Studio .Net 2003 y eMbedded VisualC++ 4.0 las opciones más comunes, respectivamente. Sin embargo, Visual Studio 2005, que está próximo a salir al mercado, soporta ambos esquemas de codificación, facilitando así la vida para los desarrolladores. Además, esta herramienta incluye la nueva versión de .NET Compact Framework (versión 2.0), un ambiente de ejecución mejorado y con mayores capacidades.

Conclusión
Seleccionar un esquema de codificación para implementar una aplicación es, sin duda alguna, una tarea importante. Esta selección puede ser de gran influencia en la buena o mala aceptación de nuestro producto.

En general, la tendencia va hacia esquemas de código administrado, ya que permiten a los desarrolladores implementar una vez e instalar en múltiples dispositivos sus aplicaciones, lo cual se traduce en una mejor productividad.

La decisión para hacer uso de uno u otro esquema de codificación depende básicamente de los requerimientos específicos de la aplicación y de los resultados que esperamos obtener; resultados asociados a factores tales como el desempeño, la seguridad y el buen manejo de los recursos.

Referencias
• Keserovic, Mortenson, Nathan. An Overview of Managed/Unmanaged Code Interoperability. MSDN. www.msdn.com
• Boling, Douglas. Programming Microsoft Windows CE .NET. 3a Edición, Microsoft Press, 2003.
• Gregory, Kate. “Managed, Unmanaged, Native: What Kind of Code Is This?” www.codeguru.com