Los usuarios ahora pueden ejecutar el servidor de desarrollo remoto del editor Zed en FreeBSD aprovechando la capa de compatibilidad con Linux del sistema y un parche de kernel específico para corregir un error de lectura de directorios. Esta solución alternativa aborda una limitación en la que el servidor remoto de Zed no reconoce a FreeBSD como una plataforma compatible, lo que resulta en árboles de proyectos vacíos o errores de 'Argumento no válido'.

Falseamiento de la plataforma del host

Debido a que Zed no ofrece actualmente un servidor remoto nativo para FreeBSD, los usuarios pueden utilizar el binario de Linux proporcionado por el equipo de Zed. Esto requiere habilitar la compatibilidad con Linux en el host FreeBSD y utilizar un script envolvente para interceptar el comando `uname`.

El script envolvente identifica la plataforma como 'Linux x86_64' mientras pasa todos los demás argumentos a la utilidad `uname` real. Esta 'pequeña mentira' permite que Zed inicie una conexión con éxito y cargue el binario del servidor Linux en el host.

Una ventana de terminal que muestra un script de shell utilizado para falsear la plataforma del host para Zed.
Se utiliza un script envolvente para interceptar el comando uname y reportar la plataforma como Linux x86_64.hayzam.com

Este script permite que el editor Zed crea que se está ejecutando en un host Linux, permitiendo el uso del binario oficial del servidor remoto de Linux en FreeBSD.

“Es una pequeña mentira, pero contenida, y es la parte que me encantaría retirar.”

— Lying to Zed to get its remote server running on FreeBSD | Hayzam

La regresión del búfer de 768 bytes

Incluso con la plataforma falseada, los usuarios pueden encontrar un error de 'Argumento no válido (os error 22)' al intentar ver los archivos del proyecto. Esto es causado por una regresión en la capa de emulación de Linux (Linuxulator) del kernel de FreeBSD que afecta a cómo se dimensionan las entradas de directorio.

En términos sencillos, Zed solicita un lote de nombres de archivos, pero el Linuxulator redondea hacia arriba el tamaño de estos lotes a bloques de 512 bytes. Si el tamaño total excede el búfer de 768 bytes asignado por el llamador, la capa de emulación devuelve un error, haciendo que Zed informe que la carpeta está vacía.

Tamaños de búfer y bloque en el error de Linuxulator: Búfer del llamador 768 bytes; Tamaño de bloque (DEV_BSIZE) 512 bytes
Tamaños de búfer y bloque en el error de Linuxulatorhayzam.com

Gráfico de HN Digest basado en cifras de hayzam.com; los valores se muestran como en la fuente.

Parche de kernel e implementación

El problema se resuelve aplicando el parche de kernel ec6629628cb, el cual fue fusionado en la rama FreeBSD 15.2-RELEASE. Este parche asegura que, si el conteo solicitado es menor que el bloque estándar de 512 bytes, el tamaño de lectura se redondee correctamente sin exceder el tamaño máximo del búfer.

Una ventana de terminal que muestra los detalles del parche de kernel para el Linuxulator de FreeBSD.
El parche de kernel específico ec6629628cb aborda la regresión del búfer de 768 bytes en la capa de emulación de Linux.hayzam.com

El parche asegura que los tamaños de lectura de directorio se redondeen y limiten correctamente para evitar fallos de 'os error 22' durante el acceso al sistema de archivos.

Para aquellos que buscan una experiencia nativa, el puerto `editors/zed` también compila un servidor remoto, pero puede quedar rezagado respecto a los lanzamientos oficiales. La ruta basada en Linux es generalmente preferida para mantenerse al día con las últimas funciones del editor.

Qué dicen los lectores de Hacker News

  • Alternativa: Un comentarista sugirió que la edición remota se puede lograr sin un servidor especializado simplemente usando SSH, señalando que este método suele ser suficiente para muchos usuarios. comentario ↗
  • Pregunta abierta: Otro usuario cuestionó por qué el servidor remoto no puede compilarse de forma nativa para FreeBSD, señalando que el editor en sí solo enfrenta problemas menores con las llamadas de audio. comentario ↗

Resumen de opiniones del hilo de Hacker News; no son hechos verificados. Leer el debate completo ↗