¿Por qué usamos GNU/Linux y el resto del software libre?
Bueno, en realidad el título queda demasiado grande para lo que ideaba expresar en este artículo. Luego iré a eso, pero siendo bien básico, diré que uso software libre porque me gusta poder controlar mi PC, usar los programas con cualquier finalidad, poder estudiarlos si quiero (ver el código fuente, la "receta"), modificarlos si me place, mejorarlos si puedo, y compartir esas mejoras con el resto del mundo si así lo deseo. Verán que en esta frase existen palabras claves, y que todas tienen que ver con el poder hacer algo, con el deseo, con la voluntad, es decir con la acción sobre el software (parte lógica de la máquina), y por lo tanto sobre el hardware (parte física).
Bien, sobre este asunto de poder estudiar cómo están hechos los programas, y poder ayudar a la gente, quienes usamos software libre todos los días estamos acostumbrados a vivir de ese modo. El propósito de este artículo es dar un mínimo ejemplo.
Hoy respondí un mail de un compañero llamado Luis que tiene un problema con su tarjeta de sonido: si no utiliza el servidor de sonido jack, la tarjeta de sonido no puede ser utilizada por más de un programa a la vez. Por ejemplo, no puede estar escuchando una canción mientras chatea con aMSN con sonidos. Esto aún no está resuelto para su placa de sonido, siendo que es una placa en apariencia de baja calidad y los drivers aún no están completos, de eso se encargará la gente de ALSA (un grupo de programadores pagados por Novell que diseñan controladores de sonido). Pero al menos Luis quería saber qué programas (procesos) estaban utilizando la placa de sonido, para poder desbloquearla.
Me apresuré en contestar, y le dije que era muy "fácil" ironizando, dado que para hacer lo que él quería ("cómo puedo saber qué proceso la está usando?") investigué cómo funcionaba el programa de configuración de las placas de sonido en GNU/Linux, llamado "alsaconf" (lo que decía más arriba de estudiar el código fuente), y de allí derivé a un segmento de código bastante "sencillo" ubicado en otro programa llamado /etc/init.d/alsa:
echo_procs_using_sound()
{
echo $(
lsof +D /dev -F rt
| awk ‘/^p/ {pid=$1} /^t/ {type=$1} /^r0x(74|e)..$/ && type == "tCHR" {print pid}’
| cut -c 2-
| uniq
)
}
No tenía nada de tiempo para analizar eso, pero sabía que la función "echo_procs_using_sound" significaba que daría como resultado los procesos (procs) utilizando (using) sonido (sound). Es decir que era lo que él necesitaba. Tomé partes del programa /etc/init.d/alsa para realizar un script que simplemente desbloqueara el uso de la tarjeta de sonido cerrando los procesos que la estuvieran utilizando, no era la mejor solución pero no tenía tiempo para nada mejor.
Lo bueno de todo esto es que luego otro compañero de la lista de mail contestó algo más simple quizá: ejecutá en una consola
lsof | grep dsp
Explicando que "lsof" es "list open files" (listar los archivos abiertos), y "|grep dsp" sirve para buscar en la salida del comando anterior la palabra dsp (el dispositivo de sonido). En fin, para algunos quizá sea cosa de "loquitos de la programación", para nosotros es básico poder entender cómo funcionan los programas y poder modificarlos para tener el control sobre nuestros equipos informáticos.
A raíz de esto, veremos de hacer un pequeño script que funcione gráficamente y permita ver qué programas utilizan la placa de sonido, para luego dar la opción de cerrarlos o no.
Por Marcos Guglielmetti, el 11/03/2008.