← Proyectos
SoftwareALFA

Ferrox

Explorador de archivos modular en Rust. Un núcleo de sistema de archivos virtual separa las operaciones de disco de la interfaz, con una CLI implementada y una TUI prevista.

RustVFSCLILinux
Mi participación
Autor y desarrollador
Ficha actualizada

Un núcleo, varias interfaces

Ferrox es un explorador de archivos en Rust que parte de una separación concreta: las operaciones del sistema de archivos no deberían depender de cómo se muestran al usuario. Un mismo núcleo puede servir a una línea de comandos y, más adelante, a una interfaz de terminal interactiva.

El proyecto está en v0.1.0-alpha, según su README. La implementación actual es una aplicación de espacio de usuario con un backend local basado en std::fs. No es un sistema operativo, una GUI terminada ni una herramienta con rendimiento comparativo demostrado.

Arquitectura

El workspace de Cargo contiene tres crates con responsabilidades distintas:

Componente Responsabilidad Estado documentado
ferrox-core Contrato VFS, modelos y backend local Implementado, API alfa
ferrox-cli Argumentos, comandos y presentación en consola Implementado
ferrox-tui Futura interfaz interactiva de terminal Placeholder

El trait FileSystem define read_dir, metadata, exists, create_dir, remove, rename y find. LocalFileSystem implementa esas operaciones sobre el sistema de archivos del equipo. Los modelos VfsEntry, VfsMetadata y NodeType representan entradas, metadatos y tipos de nodo.

ferrox-cli
    │
    ▼
FileSystem → LocalFileSystem → std::fs
    ▲
    │
ferrox-tui (prevista; aún no integrada)

La CLI usa clap para interpretar argumentos. El núcleo mantiene separadas las operaciones y la presentación: por ejemplo, ordenar directorios primero y formatear tamaños son tareas de la CLI.

Qué está implementado

  • Listado con ls, colocando directorios antes que archivos y ordenando nombres sin distinguir mayúsculas.
  • Consulta de metadatos con stat.
  • Creación de directorios con mkdir, movimiento o renombrado con mv y eliminación con rm.
  • Búsqueda recursiva con find, mediante una pila explícita y coincidencia de subcadenas sensible a mayúsculas.
  • Tamaños legibles en B, KB, MB y GB en el listado.
  • Ocho pruebas unitarias del backend local presentes en el código revisado, usando directorios temporales.

La presencia de pruebas es evidencia de trabajo de verificación, no una afirmación de que se hayan ejecutado ni de cobertura exhaustiva en esta revisión del portfolio.

Probar la CLI

Se necesita un entorno de desarrollo Rust y Cargo. Estos comandos compilan desde el repositorio y muestran operaciones de consulta; no son una demo ejecutándose en esta web.

git clone https://github.com/fabricioarce/ferrox.git
cd ferrox
cargo build --release
cargo run -p ferrox-cli -- --help
cargo run -p ferrox-cli -- ls .
cargo run -p ferrox-cli -- stat README.md
cargo run -p ferrox-cli -- find main .

En el código revisado, find recibe primero el patrón y después la ruta opcional: find <pattern> [path]. Esta ficha sigue la definición de argumentos de la CLI, aunque un ejemplo del README invierte ese orden.

Ferrox es software alfa. rm elimina directorios recursivamente y no implementa una papelera o confirmación en el código revisado. Para explorar operaciones de escritura, usa únicamente datos de prueba prescindibles.

Limitaciones y próximos pasos

La TUI aún imprime un mensaje de placeholder. El VFS actual es síncrono; la E/S asíncrona, la búsqueda aproximada y la interfaz de tres paneles son planes del roadmap, no funciones disponibles.

La búsqueda actual omite directorios cuya lectura falla, sin reportar esos errores al llamador. La revisión tampoco demuestra un manejo exhaustivo de enlaces simbólicos, permisos, árboles grandes o fallos de operaciones. Son aspectos que conviene verificar antes de recomendar un uso más amplio.

La GUI, los plugins y la posible adaptación a un entorno de sistema operativo propio pertenecen a la visión de largo plazo. Las metas de latencia del roadmap son objetivos, no benchmarks alcanzados.

Evidencia y referencias

Esta ficha describe una instantánea revisada el 7 de septiembre de 2026, basada en el commit f8661c3, fechado el 6 de septiembre de 2026. No se actualiza automáticamente al cambiar el repositorio.

Bitácora del proyecto