Noticias que mencionan glibc

Incompatibilidades entre el estándar C y las implementaciones de GCC y Clang

El lenguaje C, aunque estandarizado, presenta divergencias significativas entre su especificación teórica y las implementaciones prácticas de compiladores como GCC y Clang, así como de librerías como glibc y musl. Esta discrepancia afecta la portabilidad y la conformidad del código, especialmente en

Cómo reemplazar la detección de funciones por sistemas de construcción

La detección de funciones mediante la compilación de pruebas, como la implementan autoconf y CMake, presenta limitaciones significativas: es ineficiente, frágil, lenta y carece de seguimiento de cambios. Este artículo técnico explica cómo superar estas deficiencias integrando la detección directamen

Cómo invocar execve en C sin nombrar la función

En entornos de evaluación automatizada de código en C, los sistemas de corrección suelen restringir el uso de funciones específicas para detectar plagio o errores de sintaxis. Un desafío técnico surge cuando se requiere ejecutar código arbitrario mediante la llamada al sistema execve, pero el compil

Optimización de rendimiento en Rust mediante técnicas zero-copy

El artículo técnico explora la optimización de rendimiento en Rust mediante la técnica zero-copy, enfocándose en la reducción de la sobrecarga de memoria durante el procesamiento de datos. El autor argumenta que la eficiencia no depende solo de la velocidad de cálculo, sino también del costo de la a

Análisis técnico de House of Apple 2 en glibc 2.43

Este documento técnico detalla el funcionamiento de House of Apple 2, una técnica de explotación de control de flujo en glibc, utilizando un entorno de sandbox basado en Ubuntu 26.04 y Fedora 44. El análisis se centra en cómo manipular las estructuras de flujo de archivo (_IO_FILE) para evadir las v

Fallo en instrucción atómica de CPU LoongArch causa bucle infinito en normaliz

Wang Miao, mantenedor de la portación de Debian 13 a LoongArch, identificó un bucle infinito en el software normaliz durante el proceso de empaquetado. El problema, que persistió durante seis meses, se atribuyó a una instrucción atómica de CPU que no se ejecutaba de forma atómica en ciertos casos, i

Ejecución de código mediante manipulación de DWARF en glibc

Este artículo técnico detalla un método avanzado para lograr la ejecución de código arbitrario en sistemas que utilizan glibc 2.44, sin necesidad de vulnerabilidades de desmemoria clásicas ni de romper ASLR. La técnica se basa en la manipulación de los puntos de cancelación de hilos POSIX y la ejecu

Fundamentos del sandboxing de software y la reducción de privilegios

El sandboxing de software es un mecanismo de seguridad que restringe los privilegios de un proceso para limitar su acceso a recursos del sistema. A diferencia de las políticas de administrador de sistemas basadas en permisos de archivos, el sandboxing permite a los desarrolladores de software implem

Cómo arrancar el kernel de Linux en una nueva plataforma

Arrancar el kernel de Linux en una plataforma nueva, especialmente en sistemas embebidos o hardware personalizado, es un proceso fundamental que requiere comprender los requisitos mínimos del sistema operativo. Aunque Linux es un software complejo, sus necesidades de hardware para iniciar son sorpre

Una conversión de timestamp a hora, minuto y segundo ocho veces más rápida

La descomposición de un timestamp diario [0‥86399] en hora, minuto y segundo es una operación omnipresente en bibliotecas de fecha y hora, pero las implementaciones mayoritarias —desde el kernel de Linux y glibc hasta Go, CPython, OpenJDK, V8, Boost y musl— la resuelven mediante divisiones y módulos

Grail: cómo llevar rangos de versiones a Nixpkgs tras una década sin ellos

Grail es una nueva herramienta —presentada por su autor en el blog de nixmultiverse— que introduce por primera vez soporte para rangos de versiones en Nixpkgs, el gestor de paquetes funcional sobre el que se construye NixOS. Hasta ahora, cada atributo del repositorio tenía una única versión ligada a

El allocator de musl reduce el rendimiento en Rust

Un desarrollador de Brokk AI documenta las severas penalizaciones de rendimiento que sufre la librería C musl cuando se utiliza como base para binarios estáticos en Rust. Tras migrar su proyecto Bifrost a musl buscando mayor portabilidad, el autor identificó una degradación significativa en la veloc

Novedades de Emacs 31.1: el fin del dumper unexec y mejoras de usabilidad

Emacs 31.1 ya está disponible y, a diferencia de entregas anteriores, no llega encabezado por una única gran característica: el esperado recolector de basura se ha aplazado a Emacs 32. La novedad más simbólica es el fin del dumper unexec, el método histórico que volcaba la memoria de Emacs a un bina

nss-userhosts: extensión NSS para entradas /etc/hosts por usuario

nss-userhosts es una biblioteca escrita en Rust (87,9 % del código, completado con Shell, Dockerfile y just) que actúa como módulo de Name Service Switch (NSS) para glibc. Su objetivo es permitir que cada usuario sin privilegios mantenga sus propios registros tipo /etc/hosts en archivos independient

SoLo: binarios estáticos de Linux que cargan el driver gráfico del sistema

SoLo es una librería de código abierto que resuelve una limitación clásica de los binarios estáticos de Linux: la imposibilidad de cargar bibliotecas dinámicas del sistema, en especial los drivers gráficos. Los ejecutables vinculados con musl son cómodos de distribuir (un solo fichero, sin dependenc

Cómo acelerar scripts Haskell en GitHub Actions con bundles en caché

Ejecutar scripts Haskell en GitHub Actions suele ser lento: cada ejecución parte de un runner limpio, sin caché de Nix ni de Magix, así que hay que instalar herramientas, descargar dependencias y compilar el guion desde cero. En un caso real, esa puesta en marcha consumió 92 de los 105 segundos tota

Wails v2.11.0: compilación cruzada para Linux y Windows, pero con obstáculos

Wails v2.11.0, el framework para aplicaciones de escritorio con Go y un frontend web, permite generar en una sola orden ejecutables e instaladores para Linux y Windows desde una máquina amd64 con Ubuntu 24 y Go 1.25.5. Un único comando produce archivos para linux/amd64, windows/amd64, windows/arm64

Nixpkgs tiene un problema de garantías procesales en su gobernanza

Un ex-colaborador veterano de Nix y NixOS denuncia que Nixpkgs carece de un proceso formal y transparente para la toma de decisiones de gobernanza. Relata que el 8 de junio de 2025 la delegación de committers le retiró el acceso de forma indefinida por un «patrón consistente de mal juicio», citando

std::hive de C++26: más rápido que list, pero no reemplaza a vector

std::hive, el nuevo contenedor que incorpora el estándar C++26, ocupa un espacio intermedio entre std::vector y std::list. Como un vector, almacena sus elementos en bloques contiguos de memoria, lo que permite recorrerlos sin saltar entre punteros; como una lista, nunca mueve un elemento tras insert

Escribir un programa en C válido sin función main(): tutorial paso a paso

Este tutorial técnico de iximiuz Labs muestra cómo construir un ejecutable en C que prescinde de la función main() y, opcionalmente, de toda la biblioteca estándar, recurriendo directamente a las llamadas al sistema del kernel de Linux. El recorrido parte de un programa «Hola, mundo» convencional co

Fil-C presenta ensamblador inline con seguridad de memoria

Fil-C, una variante de C y C++ con seguridad de memoria desarrollada por pizlonator, incorpora compatibilidad con ensamblador inline manteniendo las garantías de seguridad. La función, aún en fase preliminar y no incluida en el lanzamiento 0.679, requiere compilar desde el código fuente. El proyect

La variable de entorno LD_DEBUG para depurar bibliotecas compartidas en Linux

La variable de entorno LD_DEBUG es una herramienta poco conocida del enlazador dinámico de Linux que facilita el diagnóstico de problemas de carga de bibliotecas compartidas. En sistemas grandes con múltiples versiones de bibliotecas dinámicas, es habitual que se cargue una versión distinta de la es

La métrica de memoria de AWS Lambda oculta el consumo real del proceso

Un equipo de ingeniería detectó que una función de AWS Lambda que alojaba 40 modelos ONNX de unos 250 MB cada uno sufría errores OOM puntuales (1 de cada 100.000 solicitudes). Al reducir el tamaño de la caché LRU de 16 a 8, el problema se agravó: en tres horas se registraron más de 270 cierres SIGKI

Cómo reducir al mínimo un binario en C con GCC

Este artículo analiza paso a paso cómo reducir el tamaño de un ejecutable ELF en x86-64 compilado con GCC partiendo de un programa mínimo que simplemente devuelve 0 al sistema. El autor, mediante una serie de iteraciones con banderas del compilador y código ensamblador inline, consigue reducir el bi

Rusty Penguin crea un sistema operativo ternario desde cero en Rust puro

Rusty Penguin es un sistema operativo completo desarrollado desde cero en Rust puro, sin depender del kernel Linux ni de libc. Su innovación clave reside en la adopción de la lógica ternaria (-1, 0, +1) como primitiva fundamental en todas las capas: desde el planificador hasta el motor de inferencia

Chimera Linux: Minimalismo y FreeBSD en un SO

Un nuevo sistema operativo Linux llamado Chimera Linux ha sido presentado recientemente como una distribución minimalista construida desde cero. A diferencia de las distribuciones Linux tradicionales, Chimera utiliza musl como biblioteca C en lugar de glibc, dinit para la inicialización del sistema

zml-smi: monitoriza GPUs, TPUs y NPUs en una sola herramienta

Una nueva herramienta de código abierto llamada `zml-smi` ha sido lanzada para monitorizar GPUs, TPUs y NPUs de forma universal. Desarrollada por ZML, esta utilidad combina funcionalidades de `nvidia-smi` y `nvtop`, ofreciendo información en tiempo real sobre el rendimiento y la salud del hardware.

Neovim 0.12.0: Nuevo motor Lua y mejoras

El equipo de Neovim ha anunciado la disponibilidad de la versión 0.12.0 de su editor de texto, NVIM, a través de su repositorio de GitHub. Esta nueva versión incluye el motor de scripting LuaJIT 2.1.1774638290 y está disponible para descarga e instalación en Windows (tanto para arquitecturas x86_64

Optimiza tu código C: rendimiento y portabilidad

Este artículo explora técnicas para optimizar el rendimiento de software C, especialmente en arquitecturas x86-64, donde la capacidad de la CPU juega un papel crucial. El problema radica en que el código optimizado para una CPU específica puede no funcionar bien en otras, limitando la portabilidad.

C++: ¿por qué la memoria inicial es de 72 KB?

El artículo investiga por qué la primera asignación de memoria en C++ (usando `malloc`) suele ser de 72 KB. El autor, un desarrollador que experimenta con sus propios allocators de memoria, descubrió este patrón recurrente al registrar el tamaño de las asignaciones. Para rastrear el origen de esta a