La tecnología que nos rodea cambia rápidamente; quizá hayas oído que WebAssembly (o Wasm, para abreviar) está causando sensación entre desarrolladores y entusiastas de la tecnología. Pero ¿qué es exactamente WebAssembly y por qué es tan importante como para que le prestes atención? Veámoslo.
¿Qué es WebAssembly?
WebAssembly es, fundamentalmente, un conjunto de instrucciones binarias. Es similar a lenguajes ensambladores de los que quizá hayas oído hablar, como x86 o ARM, pero incorpora algunas características y garantías de seguridad nuevas. Puedes escribir código en un lenguaje de programación como C o Rust y compilarlo en un artefacto de WebAssembly. Dado que Wasm se creó inicialmente para la web, su principal atractivo era que permitía ejecutar aplicaciones de alto rendimiento en la web a velocidades casi nativas, aunque hoy en día WebAssembly también está teniendo una amplia adopción fuera del navegador.
Una de las características que distingue a Wasm de otros destinos de compilación es su portabilidad. El código WebAssembly puede ejecutarse en cualquier plataforma siempre que exista un entorno de ejecución compatible, independientemente de la arquitectura subyacente. Esto significa que los desarrolladores pueden escribir el código una sola vez y confiar en que se ejecutará en cualquier lugar, ya sea en Windows, macOS, Linux, sistemas operativos móviles, el navegador o incluso una bombilla.
¿Es seguro WebAssembly?
La seguridad es absolutamente primordial, especialmente en el mundo digital en el que vivimos hoy en día. Por ello, WebAssembly se creó con la seguridad como uno de sus principales objetivos de diseño. Detengámonos un momento a pensar en lo que hacen los navegadores web. Cuando visitas una página web, tu navegador descarga código desconocido y no fiable y lo ejecuta, algo realmente aterrador si lo piensas bien. La función de tu navegador es protegerte a ti y a tu dispositivo frente al código malicioso, y esa misma filosofía se ha integrado en WebAssembly mediante:
- Entorno aislado: Esto aísla el código WebAssembly del entorno anfitrión, impidiendo que acceda a datos no autorizados o que obtenga información sobre el entorno en el que se está ejecutando.
- Acceso denegado de forma predeterminada: WebAssembly aplica una política de seguridad muy estricta que deniega el acceso de forma predeterminada, lo que significa que no puede acceder a los recursos del sistema sin permiso explícito. Esto se aplica incluso a recursos básicos como la hora del sistema, que no está disponible en absoluto a menos que se comparta específicamente con el código Wasm.
- Límites de memoria: Cada instancia de WebAssembly en ejecución dispone de su propio bloque de memoria, fuera del cual no puede acceder, completamente aislado de otras instancias de WebAssembly y de la memoria del sistema anfitrión.
¿Es rápido WebAssembly?
WebAssembly se diseñó para ser rápido. En comparación con JavaScript, el código Wasm puede descodificarse y empezar a ejecutarse antes incluso de que el código JavaScript pueda analizarse. Permite ofrecer nuevas experiencias en los navegadores, además de un rendimiento casi nativo fuera de ellos, con garantías de portabilidad y seguridad.
¿Por qué debería importarte?
No se trata en absoluto de sustituir JavaScript. Ambas son tecnologías complementarias y se diseñaron para funcionar juntas, no para competir entre sí. JavaScript sigue siendo necesario para las partes dinámicas e interactivas de las aplicaciones web, mientras que Wasm se utiliza más para tareas que requieren un gran esfuerzo computacional.
Dado que el código WebAssembly se ejecuta dentro de un entorno de ejecución, es fácil incorporarlo a una aplicación existente, ya sea una aplicación web o una aplicación que se ejecute en el edge o en el servidor. Esto permite ampliar la aplicación con código escrito en prácticamente cualquier lenguaje, e incluso con código de terceros que no sea de confianza. Por ello, WebAssembly resulta especialmente adecuado para sistemas de plugins, ya que permite ejecutar de forma segura dentro de la aplicación código proporcionado por miembros de la comunidad o clientes. Todo esto es posible gracias al excelente modelo de seguridad de WebAssembly.
WebAssembly es eficiente
WebAssembly ha causado un gran impacto en la computación sin servidor. En comparación con los contenedores, los módulos Wasm son diminutos: la mayoría de los módulos generados ocupan apenas unos kilobytes o unos pocos megabytes, mientras que los contenedores pueden alcanzar fácilmente cientos de megabytes o varios gigabytes. Además del tamaño de almacenamiento, Wasm también resuelve el famoso problema del «arranque en frío»: el código Wasm puede empezar a ejecutarse en cuestión de microsegundos, por lo que no es necesario mantener código en ejecución para poder responder rápidamente a las solicitudes. Se podría iniciar una instancia de Wasm al recibir una solicitud con un impacto mínimo en la latencia. Esto significa que los sistemas basados en WebAssembly pueden reducir su escala hasta cero cuando no hay tráfico, lo cual es una bendición tanto para la madre naturaleza como para tu bolsillo.
WebAssembly se puede componer
En mi opinión, lo que realmente marcará un antes y un después es el modelo de componentes de WebAssembly. Cambiará radicalmente la forma en que los desarrolladores crean y componen software gracias a:
- Acceso entre ecosistemas: ¿Quieres usar las bibliotecas criptográficas de Go, un serializador JSON de Rust y utilidades de cálculo numérico de Python? No hay problema. Con el Modelo de Componentes, puedes seleccionar software de prácticamente cualquier ecosistema de lenguajes y combinarlo como si se tratara de bibliotecas nativas escritas en un mismo lenguaje.
- Flexibilidad de desarrollo: Los distintos equipos de una organización pueden elegir la herramienta más adecuada para cada tarea. Pueden seleccionar los lenguajes de programación y las pilas de software que mejor se adapten a sus conocimientos y a los requisitos del proyecto, con la seguridad de que los resultados de su trabajo se integrarán perfectamente en la aplicación completa.
En pocas palabras, los desarrolladores pueden crear componentes de software en cualquier lenguaje capaz de generar código WebAssembly y, a continuación, integrarlos fácilmente en una única aplicación.
WebAssembly es una tecnología que merece su atención. Tanto si es un desarrollador que busca añadir nuevas funcionalidades a su aplicación como si representa a una empresa centrada en crear soluciones escalables y rentables, Wasm podría ser la opción adecuada. A medida que sigue madurando y ganando apoyo, WebAssembly está en condiciones de redefinir nuestra forma de concebir el desarrollo de software e interactuar con él. No pierda de vista WebAssembly, porque no es solo el futuro: ya está aquí y está transformando el software tal como lo conocemos.
¿Quieres saber más sobre WebAssembly? Escucha el pódcast WebAssembly Unleashed de F5 en YouTube, Spotify o Apple Podcast.
Sobre el autor
Artículos relacionados del blog
Proteger los endpoints de las API dificulta la seguridad de las API
Descubre las complejidades de la seguridad de las API, los retos a los que se enfrentan las organizaciones, la evolución de los ataques contra endpoints de API y la necesidad de políticas de seguridad adaptadas.
¿Qué es el sesgo de la IA y por qué es importante para TI?
Descubre los fundamentos del aprendizaje de la IA. Aprende cómo pueden surgir sesgos en la IA y qué riesgos plantean para las TI y la transformación digital.
Redefiniendo la ciberseguridad en el extremo de la nube distribuida con IA y telemetría en tiempo real
La transformación digital y la adopción de tecnologías en la nube están provocando cambios en las arquitecturas de las aplicaciones. Estos cambios introducen nuevas superficies de ataque, que son el objetivo de métodos de ataque avanzados, altamente organizados y con motivaciones económicas. Mediante el uso del framework Morpheus de NVIDIA, F5 está investigando técnicas para detectar estas amenazas avanzadas con telemetría en tiempo real y análisis basados en IA.
El papel de la nube en las aplicaciones nativas del edge
No debería sorprender que, al igual que la aparición de la nube dio lugar a las aplicaciones nativas de la nube, el edge esté impulsando un conjunto de aplicaciones nativas del edge. Sin embargo, estas aplicaciones no residirán únicamente en el edge. Al mismo tiempo, están surgiendo nuevos patrones arquitectónicos que aprovechan las aplicaciones alojadas en la nube y en el centro de datos.
La creciente diversidad de ubicaciones y usuarios está impulsando a las empresas hacia el edge
En el contexto del ámbito de las aplicaciones, el término «usuario» siempre se ha referido a la entidad que interactúa con una aplicación. Del mismo modo que los cambios en las arquitecturas de las aplicaciones impulsan cambios en las tecnologías que permiten ofrecerlas y protegerlas, los cambios en la definición de usuario han provocado cambios en los lugares donde se despliegan las aplicaciones.
El edge está impulsando un renacimiento de las infraestructuras
A medida que las organizaciones aumentan la generación de datos y tratan de extraer valor empresarial de ellos, sin duda recurrirán a la analítica y la automatización basadas en la IA y el aprendizaje automático. Precisamente este tipo de cargas de trabajo son las que más se beneficiarían de una infraestructura optimizada y, sin embargo, hoy en día son las que menos probabilidades tienen de poder aprovecharla.