Renombrando_Daemon_por_Servicio
En el contexto de tecnología las alusiones al demonio han resultado ofensivas para algunos cristianos (por ejemplo el logo del proyecto FreeBSD ver {5}, {6} y {7}), llegando eventualmente a prohibiciones (ver {8}). Esto también ocurre con el término daemon
(o demonio) para referirse a cierto tipo de programas en ambientes tipo Unix (ver constante LOG_DAEMON
en /usr/include/syslog.h
y en manual de syslog
).
En la distribución adJ (desde 4.7) hemos venido renombrando paulatinamente daemon por servicio en el kernel y en el sistema base.
Entonces en nuestro contexto un servicio se refiere a un programa que opera en segundo plano de manera permanente desde que se inicia un servidor a la espera de conexiones por parte de programas clientes que lo requieran, son ejemplos de servicios: correo, resolución de nombres DNS, cola de impresión.
A continuación se presentan detalles del uso del término y de la implementación del cambio.
Historia
El nombre daemon según {1} fue acuñado por el proyecto MAC del MIT iniciado en 1963 del cual Unix lo habría tomado, los integrantes del proyecto MAC se basarían a su vez en el demonio de Maxwell, un experimento para explicar termodinámica. Respecto a tal descripción hemos revisado fuentes de Unix en diversas versiones mantenidas por The Unix Heritage Society y otras fuentes:
- En el libro de 1891 donde Maxwell describió su experimento, no uso la palabra demon (ver {11}) tal nombre lo encontramos referenciado por Lord Kelvin (ver {12})
- Se encuentra comentarios con este términos en las fuentes del CTSS (Compatible Time-Sharing System) disponibles en {20}, desarrollado por el proyecto MAC y demostrado en 1961, según {9} el término comenzó a usarse en el CTSS , y en este se basó Multics en el cual a su vez se basó Unix.
- En la versión 2 de Unix de 1972 se encuentra
daemon
como etiqueta entre los fragmentos de fuentes en ensamblador públicamente conocidos (ver en {13}) - La versión 3 de 1973 en el título de las fuentes de ensamblador de
lpd
dice “lpd -- Line Printer daemon
” y así continuó ampliandose su uso en versiones posteriores para otros programas y una cuenta de usuario en la versión 5. - Con respecto a su uso en
syslog.h
, este archivo aparece la primera vez en 4.2BSD que es de 1983 (ver {14}), aunque esta versión no incluye la constanteLOG_DAEMON
. Como se explica en {4} BSD fue la distribución de Berkley, que se basó en fuentes donadas de Unix, y que empezó a realizar más innovaciones que la versión V de AT&T. - En 4.3 aparece
/etc/syslog.conf
con facilidaddaemon
ysyslog.h
es referenciado en fuentes desyslogd
(ver {15} ) - La facilidad no era un nombre estándar en POSIX 2001 (ver {16}) pero fue introducida posteriormente y fue estándar desde la revisión de 2004 de POSIX (ver {17}).
- En las fuentes de OpenBSD rastreables está desde 1995 (ver {18}) y en las fuentes rastreables de FreeBSD desde 1994 (ver {19}). Según la página del manual de
syslog
de OpenBSD 4.8 provienen de 4.2BSD
Implementación del cambio
Se ha implementado en este orden: kernel, archivos de configuración de /etc
, documentación, programas del sistema base
!1. Kernel Desde adJ 4.7 en general se cambiaron comentarios a lo largo de todas las fuentes. Otros pequeños cambios fueron:
- Nombre de la llamada 153 en capa de compatibilidad de FreeBSD que no está implementada (
sys/compat/freebsd
) - En
dev/raidframe
la funciónrf_GetSpareTableFromDaemon
declarada endev/raidframe/rf_kintf.h
, implementada endev/raidframe
/rf_decluster.c y sólo usada endev/raidframe
se renombró porrf_GetSpareTableFromServicio
- En
nfs/nfs.h
se cambio el símboloNFS_MAXASYNCDAEMON
porNFS_MAXASYNCSERVICIO
usado solo en esta parte del kernel. - En
sys/sys/buf.h
se renombró el símboloB_PDAEMON
porB_PSERVICIO
, la funciónbuf_daemon
porbuf_servicio
, y una cadena deB_BITS
la cual sólo es usado para imprimir ensys/kern/vfs_subr.c
La mayoría de cambios en el kernel se concentran y conectan con sys/uvm/
:
- Se renombró el archivo
pdaemon.c
porpservicio.c
, así como la funciónuvm_aiodone_daemon
poruvm_aiodone_servicio
- Se renombraron las variables globales
pagedaemon
ypagedaemon_proc
porpageservicio
ypageservicio_proc
(declaradas ensys/uvm/uvm.h
) - Se renombraron miembros de la estructura
struct uvmexp
declarada ensys/uvm/uvm_extern.h
y empleada en diversos archivos desys/uvm
, así como las fuentes del ejecutable/usr/bin/vmstat
que las usa. - Se renombraron varios hilos de ejecución el kernel relacionados con memoria virtual y en particular relacionados con
sys/uvm
, por ejemplo ensys/kern/init_main.c
,kern/vfs_bio.c
Con respecto a cambios que afectan programas fuera del kernel sólo están:
- Cambio al ejecutable
vmstat
que ahora en lugar de reportarpagedaemon
reportapageservicio
- En
syslog
el nombre de la facilidaddaemon
y su símbolo asociadoLOG_DAEMON
(versys/sys/syslog.h
). Para no quebrar aplicaciones se dejó y se aumentóLOG_SERVICIO
con el mismo valor deLOG_DAEMON
y se añadió el nombre de facilidadservicio
asociado al mismo número dedaemon
.
!2. Archivos de configuración de /etc
- Desde adJ 4.9 Se renombró la bitácora
/var/log/daemon
por/var/log/service
y se cambió su uso a lo largo del sistema base. - Desde adJ 5.1 se renombró
daemon
porservice
en todo archivo, se trataron de forma especial: ** Servicios iniciados en/etc/rc.d
, en adJ emplean las variablesservicio_user
,servicio_flags
yservicio_class
. Se soportan pero se consideran obsoletas las variablesdaemon_user
,daemon_flags
ydaemon_class
** Enlogin.conf
se dejó la clasedaemon
para asegurar compatibilidad de programas que la empleen, pero se agregó la claseservice
que es la recomendada. ** Se dejó el grupodaemon
en/etc/groups
por compatibilidad, pero se considera obsoleto y se recomienda emplear el gruposervicio
que tiene el mismo gid dedaemon
. Se recomienda ubicar el gruposervicio
antes del grupodaemon
para que se vea este grupo al listar archivos cuyo dueño tenga gid 1. ** Se mantuvo el usuariodaemon
en/etc/master.passwd
por compatibilidad, pero se considera obsoleto. Se recomienda el nuevo usuarioservicio
que tiene el mismo uid del usuariodaemon
. Se recomienda ubicar el usuarioservicio
antes dedaemon
en/etc/master.passwd
para que al listar archivos conls
se presenteservicio
como dueño de archivos con uid 1 (este es el resultado que hemos evidenciado aún cuandoman master.passwd
dice “While it is possible to have multiple entries with identical login names and/or identical user IDs, it is usually a mistake to do so. Routines that manipulate these files will often return only one of the multiple entries, and that one by random selection.”)
!3. Documentación
Desde adJ 5.2 toda página del manual donde aparecía daemon
se renombró por servicio
.
!4. Librerías
Desde adJ 5.2
- En
libc
se cambió la funcióndaemon
porservicio
(declarada en/usr/include/stdlib.h
), aunque se dejó la primera por compatibilidad se considera obsoleta. - En
libwrapper
se cambióeval_daemon
poreval_servicio
yRQ_DAEMON
porRQ_SERVICIO
(declarados en/usr/include/tcpd.h
). Los primeros nombres se dejaron por compatibilidad pero se consideran obsoletos. La estructura request_info tenía un campo daemon que se cambió por servicio –según la documentación en tcpd.h los programas que los usan no deberían acceder directamente ese campo sino mediante eval_daemon (ahora eval_servicio).
!5. Directorios con programas
Desde adJ 5.2 se cambiaron las referencias en los programas de los directorios /bin
/game
gnu
(excepto sendmail y perl) include
kerberosIV
regress
y share
##Referencias
- {1} http://en.wikipedia.org/wiki/Daemon_%28computer_software%29
- {2} http://cm.bell-labs.com/cm/cs/who/dmr/hist.html
- {3} Twenty Years of Berkeley Unix. From AT&T-Owned to Freely Redistributable. Marshall Kirk McKusick. http://oreilly.com/catalog/opensources/book/kirkmck.html
- {4}
- {5} http://www.politechbot.com/2005/04/01/religious-leaders-warn/
- {6} http://seclists.org/politech/2005/Apr/6
- {7} http://fe.pasosdejesus.org/?id=Mascota+FreeBSD
- {8} http://www.guardian.co.uk/science/the-lay-scientist/2010/nov/15/3
- {9} http://en.wikipedia.org/wiki/Compatible_Time-Sharing_System
- {10} http://people.csail.mit.edu/psz/LCS-75/Brochure.html
- {11} http://openlibrary.org/books/OL7243600M/Theory_of_heat
- {12} http://zapatopi.net/kelvin/papers/kinetic_theory.html#fn1
- {13} http://minnie.tuhs.org/Archive/PDP-11/Distributions/research/1972_stuff/s1-bits.gz
- {14} http://minnie.tuhs.org/cgi-bin/utree.pl?file=4.2BSD/usr/include/syslog.h
- {15} http://minnie.tuhs.org/cgi-bin/utree.pl?file=4.3BSD/usr/src/etc/syslogd.c
- {16} http://www.opengroup.org/onlinepubs/009695399/functions/syslog.html
- {17} http://www.opengroup.org/onlinepubs/009695399/basedefs/syslog.h.html
- {18} http://www.openbsd.org/cgi-bin/cvsweb/src/sys/sys/syslog.h?rev=1.1;content-type=text%2Fplain
- {19} http://www.freebsd.org/cgi/cvsweb.cgi/src/sys/sys/syslog.h?rev=1.1;content-type=text%2Fplain
- {20} http://www.piercefuller.com/data/ctss-listings.zip?id=ctss