Page 8
__rendered_path__1
GNUFDL PID_00174426
8
El núcleo Linux
__rendered_path__53
En lossistemasprivativos, el núcleo, o kernel, estáperfectamente“oculto” bajo
__rendered_path__54__rendered_path__55
las capas del software del sistema operativo, y el usuario final no tiene una
__rendered_path__54
perspectiva clara dequéesesenúcleo ni tienetampoco ninguna posibilidad de
__rendered_path__53
cambiarlo u optimizarlo, si no espor el uso deesotéricoseditoresde“registros”
__rendered_path__57
internos, o programasespecializadosde terceros(normalmente de alto coste).
__rendered_path__58
Además, el núcleo suele ser único, es el que proporciona el fabricante, el cual
__rendered_path__58
se reserva el derecho de introducir las modificaciones que quiera y cuando
__rendered_path__57
quiera, así como tratar los errores que aparezcan en plazos no estipulados,
mediante actualizaciones que nos ofrece como “parches” de errores (o grupos
de ellos denominados comúnmente servicepacks).
Uno de los principales problemas de esta aproximación es precisamente la
disponibilidad de estos parches: disponer de las actualizaciones de los erro-
res a su debido tiempo y, si se trata de problemas de seguridad, todavía con
más razón, ya que hasta que no estén corregidos no podemos garantizar la
seguridad del sistema para problemas ya conocidos. Muchas organizaciones,
grandes empresas, gobiernos, instituciones científicas y militares no pueden
depender de los caprichos de un fabricante para solucionar los problemas de
sus aplicaciones críticas.
En este caso, el núcleo Linux ofrece una solución de código abierto, con los
consecuentespermisosdemodificación, corrección, posibilidad degeneración
de nuevasversionesy actualizacionesde forma rápida, por parte de cualquiera
que quiera y tenga los conocimientos adecuados para realizarlo. Esto permite
a los usuarios críticos controlar mejor sus aplicaciones y el propio sistema, y
poder montar sistemascon el propio sistema operativo “a la carta”, personali-
zado al gusto de cada uno. También permite disponer, a su vez, de un sistema
operativo con código abierto, desarrollado por una comunidad de programa-
dores coordinados mediante Internet y accesible ya sea para educación, por
disponer del código fuente y abundante documentación, o para la produc-
ción final de los sistemas GNU/Linux adaptados a necesidades individuales o
de un determinado colectivo.
Al disponer del código fuente, sepueden aplicar mejorasy solucionesdeforma
inmediata, a diferencia del software privativo, donde debemos esperar a las
actualizacionesdel fabricante. Podemos, además, personalizar el núcleo tanto
como necesitemos, requisito esencial, por ejemplo, en aplicaciones de alto
rendimiento, críticas en el tiempo o en soluciones con sistemas empotrados
(como dispositivos móviles).
A continuación repasamos un poco la historia del núcleo [Kera, Kerb]. El nú-
MINIX
cleo Linux lo comenzó a desarrollar un estudiante finlandés llamado Linus
El núcleo tiene susorígenes
Torvalds, en 1991, con la intención de realizar una versión parecida a MINIX
en el sistema MINIX,
[Tan87](versión para PC de UNIX [Bac86]) para el procesador 386 de Intel. La
desarrollado por Andrew
Tanenbaum, como un clon
primera versión publicada oficialmente fue la de Linux 1.0 en marzo de 1994,
de UNIX para PC.
en la cual se incluía sólo la ejecución para la arquitectura i386 y soportaba

Page 9
__rendered_path__1
GNUFDL PID_00174426
9
El núcleo Linux
__rendered_path__53
máquinasde un solo procesador. Linux 1.2 fue publicado en marzo de 1995 y
__rendered_path__54__rendered_path__55
fue la primera versión en dar cobertura a diferentes arquitecturas, como Alp-
__rendered_path__54
ha, Sparc y Mips. Linux 2.0, en junio de 1996, añadió más arquitecturas y fue
__rendered_path__53
la primera versión en incorporar soporte multiprocesador (SMP) [Tum]. En Li-
__rendered_path__57
nux 2.2, de enero de 1999, se incrementaron las prestaciones de soporte SMP
__rendered_path__58
de manera significativa, y se añadieron controladores para gran cantidad de
__rendered_path__58
hardware. En la 2.4, en enero del 2001, se mejoró el soporte SMP, se incor-
__rendered_path__57
poraron nuevas arquitecturas y se integraron controladores para dispositivos
__rendered_path__68
USB, PC Card (PCMCIA de losportátiles), parte de PnP (plugand play), soporte
__rendered_path__69
de RAID y volúmenes, etc. En la rama 2.6 del núcleo (diciembre de 2003), se
__rendered_path__71__rendered_path__72
mejoró sensiblemente el soporte SMP, se introdujo una mejor respuesta del
__rendered_path__71__rendered_path__74
sistema de planificación de CPU, el uso de hilos (threads) en el núcleo, me-
__rendered_path__71
jor soporte de arquitecturas de 64 bits, soporte de virtualización y una mejor
__rendered_path__71
adaptación a dispositivos móviles.
__rendered_path__68
Respecto al proceso de desarrollo, desde su creación por Linus Torvalds en
__rendered_path__71
1991 (versión 0.01), el núcleo lo ha seguido manteniendo él mismo, pero a
__rendered_path__71
medida que su trabajo se lo permitía y a medida que el núcleo maduraba
__rendered_path__68
(y crecía), se ha visto obligado a mantener las diferentes versiones estables
__rendered_path__71
del núcleo gracias a diferentes colaboradores, mientras que Linus continua
__rendered_path__71
(en la medida de lo posible) desarrollando y recopilando aportaciones para la
__rendered_path__68
última versión de desarrollo del núcleo. Loscolaboradoresprincipalesen estas
__rendered_path__71
versiones han sido [Lkm]:
__rendered_path__71
2.0 David Weinehall.
__rendered_path__68
2.2 Alan Cox (también desarrolla y publica parches para la mayoría de
__rendered_path__71
versiones).
__rendered_path__71
2.4 Marcelo Tosatti.
__rendered_path__68
2.5 Linus Torvalds.
__rendered_path__71
2.6 GregKroah-Hartman (versionesestables) / LinusTorvalds, Andrew Mor-
__rendered_path__71
ton (releases de desarrollo).
__rendered_path__68
Para ver un poco la complejidad del núcleo deLinux, veamosuna tabla con un
Complejidad del núcleo
__rendered_path__71
poco de su historia resumida en lasdiferentesversionesy en el tamaño respec-
__rendered_path__71
El núcleo hoy en día ha
__rendered_path__68
tivo del código fuente. En la tabla solo se indican lasversionesde producción;
alcanzado unosgradosde
el tamaño esta especificado en milesde líneasdel código de lospaquetesfuen-
madurez y complejidad
significativos
tes del núcleo:
Versión
Fecha de publicación
Líneas de código (en miles)
0.01
09-1991
10
1.0
03-1994
176
1.2
03-1995
311
2.0
06-1996
649
2.2
01-1999
1800
2.4
01-2001
3378
2.6
12-2003
5930

Page 10
__rendered_path__1
GNUFDL PID_00174426
10
El núcleo Linux
__rendered_path__40
Como podemos comprobar, hemos pasado de unas diez mil líneas a seis mi-
__rendered_path__41__rendered_path__42
llones en las primeras versiones de la rama 2.6; las últimas versiones de esta
__rendered_path__41
rama se mueven entre los diez a quince millones de líneas.
__rendered_path__40
En estos momentos el desarrollo continúa en la rama 2.6.x del núcleo, la úl-
__rendered_path__44
tima versión estable, que incluyen la mayoría de distribuciones como versión
__rendered_path__45__rendered_path__46
principal (algunas todavía incluyen algunas 2.4.x, pero 2.6.x suele ser la op-
__rendered_path__45
ción por defecto en la instalación).
__rendered_path__44
Aunque ahora la rama principal sea la 2.6.x, cierto conocimiento de las an-
teriores versiones es imprescindible, ya que con facilidad podemos encontrar
máquinascon distribucionesantiguasque no se hayan actualizado, que espo-
sible que debamos mantener o realizar un proceso de migración a versiones
más actuales.
En la rama del 2.6, durante su desarrollo se aceleraron de forma significati-
va los trabajos del núcleo, ya que tanto Linus Torvalds como Andrew Mor-
ton (que mantienen varias de las ramas de Linux 2.6 en desarrollo) se incor-
poraron (durante 2003) al Open Source Developement Laboratory (OSDL),
un consorcio de empresas cuyo fin es promocionar el uso de Open Source y
GNU/Linux en la empresa (en el consorcio se encuentran, entre otrasmuchas
empresas con intereses en GNU/Linux: HP, IBM, Sun, Intel, Fujitsu, Hitachi,
Toshiba, Red Hat, Suse, Transmeta, etc.). En esos momentos se dio una situa-
ción interesante, ya que el consorcio OSDL hizo de patrocinador de los traba-
jos, tanto para el mantenedor de la versión estable del núcleo (Andrew) como
para el de la de desarrollo (Linus), trabajando a tiempo completo en lasversio-
nesy en lostemasrelacionados. Linusse mantiene independiente, trabajando
en el núcleo, mientras Andrew se fue a trabajar a Google, donde continuaba
a tiempo completo sus desarrollos, realizando parches con diferentes y nue-
vasaportacionesal núcleo, en la que se conoce como rama de desarrollo-mm.
Despues de cierto tiempo, OSDL se reconvirtió en la fundación The Linux
Foundation.
Hay que tener en cuenta que con las versiones actuales del núcleo se ha al-
Enlace de int er és
canzado ya un alto grado de desarrollo y madurez, lo que hará que cada vez
se amplíe más el tiempo entre la publicación de las versiones estables, no así
Linux Foundation:
http://www.linuxfoundation.
de lasrevisionesparcialeso de desarrollo, aspecto en el que losmantenedores
org
esperan una nueva versión cada 2 o 3 meses.
Además, otro factor a considerar es el tamaño y el número de personas que
están trabajando en el desarrollo actual. En un principio había unas pocas
personas que tenían un conocimiento global del núcleo entero, mientras que
hoy en día tenemosun importante número de personasque lo desarrollan (se
cree que cerca de variosmiles) con diferentescontribuciones, aunque el grupo
duro se estima en unas pocas docenas de desarrolladores.

Page 11
__rendered_path__1
GNUFDL PID_00174426
11
El núcleo Linux
También cabe tener en cuenta que la mayoría de desarrolladores(de losmiles)
solo tienen unos conocimientos parciales del núcleo y, ni todos trabajan si-
multáneamente, ni su aportación es igual de relevante (algunas aportaciones
solo corrigen errores sencillos). En el otro extremo, son unas pocas personas
(como los mantenedores) las que disponen de un conocimiento total del nú-
cleo. Esto supone que se puedan alargar los desarrollos y que se tengan que
depurar las aportaciones, para comprobar que no entren en conflicto entre
ellas, o que se deba escoger entre posibles alternativas de prestaciones.
Respecto a la numeración de las versiones del núcleo de Linux [Ker, Ces06],
cabe tener en cuenta los aspectos siguientes:
1) Hasta la rama del núcleo 2.6.x, lasversionesdel núcleo Linux se regían por
una división en dosseries: una era la denominada “experimental” (con nume-
ración impar en la segunda cifra, como 1.3.xx, 2.1.x o 2.5.x) y la otra era la de
producción (serie par, como 1.2.xx, 2.0.xx, 2.2.x, 2.4.x y más). La serie experi-
mental eran versionesque se movían rápidamente y se utilizaban para probar
nuevas prestaciones, algoritmos, controladores de dispositivo, etc. Por la pro-
pia naturaleza de los núcleos experimentales, podían tener comportamientos
impredecibles, como pérdidas de datos, bloqueos aleatorios de la máquina,
etc. Por lo tanto, no estaban destinadas a utilizarse en máquinas para la pro-
ducción, a no ser que se quisiese probar una característica determinada (con
los consecuentespeligros).
Los núcleos de producción (serie par) o estables eran los núcleos con un con-
junto de prestacionesbien definido, con un número bajo de erroresconocidos
y controladoresdedispositivosprobados. Sepublicaban con menosfrecuencia
que losexperimentalesy existían variedad de versiones, unasde máso menos
calidad que otras. Las distribuciones GNU/Linux se suelen basar en una de-
terminada versión del núcleo estable, no necesariamente el último núcleo de
producción publicado.
2) En la numeración actual del núcleo Linux (utilizada en la rama 2.6.x), se
siguen conservando algunos aspectos básicos: la versión viene indicada por
unos números X.Y.Z, donde normalmente X es la versión principal, que re-
presenta los cambios importantes del núcleo; Y es la versión secundaria, y
habitualmente implica mejoras en las prestaciones del núcleo: Y es par en los
núcleos estables e impar en los desarrollos o pruebas; Z es la versión de cons-
trucción, que indica el número de la revisión de X.Y, en cuanto a parches o
correcciones hechas.
Los distribuidores no suelen incluir la última versión del núcleo, sino la que
elloshayan probado con másfrecuencia y puedan verificar que esestable para
el software y componentes que ellos incluyen. Partiendo de este esquema de
numeración clásico (que se siguió durante las ramas 2.4.x hasta los inicios
de la 2.6), hubo algunas modificaciones para adaptarse al hecho de que el
núcleo (rama 2.6.x) se vuelve más estable (fijando X.Y a 2.6) y cada vez las

Page 12
__rendered_path__1
GNUFDL PID_00174426
12
El núcleo Linux
__rendered_path__31
revisionesson menores(por significar un salto de versión de los primeros nú-
__rendered_path__32__rendered_path__33
meros), pero el desarrollo continuo y frenético sigue.
__rendered_path__32
En los últimos esquemas se llega a introducir cuartos números, para especifi-
__rendered_path__31
car Z cambios menores, o diferentes posibilidades de la revisión (con diferen-
__rendered_path__35
tes parches añadidos que corrigen fallos). La versión así definida con cuatro
__rendered_path__36__rendered_path__37
números es la que se considera estable (stable). También se usan otros esque-
__rendered_path__36
mas para las diversas versiones de prueba (normalmente no recomendables
__rendered_path__35
para entornos de producción), como sufijos -rc (release candidate), -mm que
son núcleos experimentales con gran introducción de parches que suponen
nuevas prestaciones adicionales como pruebas de diferentes técnicas novedo-
sas, o los-git que son una especie de “foto” diaria del desarrollo del núcleo.
Estosesquemasde numeración están en constante cambio para adaptarse a la
forma de trabajar de la comunidad del núcleo y a susnecesidadespara acelerar
el desarrollo.
3) Para obtener el último núcleo publicado (que normalmente se denomina
vanilla o pristine), hay que acudir al archivo de núcleos Linux (disponible en
Enlace de int er és
http://www.kernel.org) o al mirror local (en España http://www.es.kernel.org).
También podrán encontrarse aquí algunos parches al núcleo original, que co-
Repositorio de núcleos
Linux:
rrigen errores detectados a posteriori de la publicación del núcleo.
http://www.kernel.org
Algunas de las características técnicas [Ces06, Kan]del núcleo Linux que po-
dríamos destacar son:
Núcleo de tipo monolítico: básicamente es un gran programa creado co-
mo una unidad, pero conceptualmente dividido en varios componentes
lógicos.
Tiene soporte para carga y descarga de porcionesdel núcleo bajo demanda;
estas porciones se llaman módulos y suelen ser características del núcleo o
controladores de dispositivo.
Hilos de núcleo: Para el funcionamiento interno se utilizan varios hilos
(threads en inglés) de ejecución internos al núcleo, que pueden estar aso-
ciados a un programa de usuario o bien a una funcionalidad interna del
núcleo. En Linux no se hacía un uso intensivo de este concepto en origen,
pero ha pasado a ser un concepto fundamental para el rendimiento, en
especial debido a la aparición de las CPU multicore. En las diferentes revi-
sionesde la rama 2.6.x se ofreció un mejor soporte, y gran parte del núcleo
se ejecuta usando diversos hilos de ejecución.
Soporte de aplicaciones multihilo: soporte de aplicaciones de usuario de
tipo multihilo (multithread), ya que muchos paradigmas de computación
de tipo cliente/servidor necesitan servidores capaces de atender múltiples
peticiones simultáneas dedicando un hilo de ejecución a cada petición o
grupo de ellas. Linux tiene una biblioteca propia de hilosque puede usarse

Page 13
__rendered_path__1
GNUFDL PID_00174426
13
El núcleo Linux
para las aplicaciones multihilo, con las mejoras que se introdujeron en
el núcleo, que también han permitido un mejor uso para implementar
bibliotecas de hilos para el desarrollo de aplicaciones.
El núcleo es de tipo no apropiativo (nonpreemptive): esto implica que den-
tro del núcleo no pueden pararse llamadasa sistema (en modo supervisor)
mientras se está resolviendo la tarea de sistema, y cuando ésta acaba, se
prosigue la ejecución de la tarea anterior. Por lo tanto, el núcleo dentro de
una llamada no puede ser interrumpido para atender a otra tarea. Normal-
mente, losnúcleosapropiativosestán asociadosa sistemasque trabajan en
tiempo real, donde debe permitirse lo anterior para tratar eventos críticos.
Hay algunas versiones especiales del núcleo de Linux para tiempo real (ra-
mas -rt, de realtime), que permiten esto por medio de la introducción de
unos puntos fijos donde las tareas del núcleo pueden interrumpirse entre
si. También se ha mejorado especialmente este concepto en la rama 2.6.x
del núcleo, que en algunos casos permite interrumpir algunas tareas del
núcleo, reasumibles, para tratar otras, prosiguiendo posteriormente su eje-
cución. Este concepto de núcleo apropiativo también puede ser útil para
mejorar tareas interactivas, ya que si se producen llamadas costosas al sis-
tema, pueden provocar retardos en las aplicaciones interactivas.
Soporte para multiprocesador, tanto lo que se denomina multiprocesamien-
to simétrico (SMP) como multicore. Este concepto suele englobar máquinas
que van desde el caso simple de 2 hasta 64 CPU colocadasen diferenteszó-
calos físicos de la máquina. Este tema se ha puesto de especial actualidad
con lasarquitecturasde tipo multicore, que permiten de 2 a 8 o másnúcleos
de CPU en un mismo zócalo físico, en máquinas accesibles a los usuarios
domésticos. Linux puede usar múltiples procesadores, donde cada proce-
sador puede manejar una o más tareas. Pero originalmente había algunas
partes del núcleo que disminuían el rendimiento, ya que están pensadas
para una única CPU y obligan a parar el sistema entero en determinados
bloqueos. SMP es una de las técnicas más estudiadas en la comunidad del
núcleo de Linux, y se han obtenido mejoras importantes en la rama 2.6.
Del rendimiento SMP dependeen gran medida la adopción deLinux en los
sistemas empresariales, en la faceta de sistema operativo para servidores.
Sistemasde ficheros: el núcleo tiene una buena arquitectura de lossistemas
de ficheros, ya que el trabajo interno se basa en una abstracción de un sis-
tema virtual (VFS, virtual file system), que puede ser adaptada fácilmente a
cualquier sistema real. Como resultado, Linux esquizás el sistema operati-
vo que mássistemasde ficherossoporta, desde su propio ext2 inicial, hasta
msdos, vfat, ntfs, sistemascon journal como ext3, ext4, ReiserFS, JFS(IBM),
XFS(Silicon), NTFS, iso9660 (CD), udf, etc. y se van añadiendo más en las
diferentes revisiones del núcleo.
Otras características menos técnicas (un poco de marketing) que podríamos
destacar:

Page 14
__rendered_path__1
GNUFDL PID_00174426
14
El núcleo Linux
1) Linux es gratuito: junto con el software GNU, y el incluido en cualquier
distribución, podemos tener un sistema tipo UNIX completo prácticamen-
te por el coste del hardware; y por la parte de los costes de la distribución
GNU/Linux, podemosobtenerla prácticamente gratis. Pero no está de máspa-
gar por una distribución completa, con los manuales y apoyo técnico, a un
coste menor comparado con lo que se paga por algunos sistemas privativos,
o contribuir con la compra al desarrollo de las distribuciones que más nos
gusten o nos sean prácticas.
2) Linux espersonalizable: la licencia GPL nospermite leer y modificar el có-
digo fuente del núcleo (siempre que tengamoslosconocimientosadecuados).
3) Linux se ejecuta en hardware antiguo bastante limitado; es posible, por
ejemplo, crear un servidor de red con un 386 con 4 MB de RAM (hay distribu-
ciones especializadas en bajos recursos).
4) Linux esun sistema de altasprestaciones: el objetivo principal en Linux es
la eficiencia y se intenta aprovechar al máximo el hardware disponible.
5) Alta calidad: los sistemas GNU/Linux son muy estables, con una baja pro-
porción de fallos, y reducen el tiempo dedicado a mantener los sistemas.
6) El núcleo esbastante reducido y compacto: esposible colocarlo, junto con
algunosprogramasfundamentalesen un solo disco de 1,44 MB (existen varias
distribuciones de un solo disquete con programas básicos).
7) Linux es compatible con una gran parte de los sistemas operativos, puede
leer ficheros de prácticamente cualquier sistema de ficheros y puede comuni-
carse por red para ofrecer y recibir servicios de cualquiera de estos sistemas.
Además, también con ciertas bibliotecas puede ejecutar programas de otros
sistemas(como MS-DOS, Windows, BSD, Xenix, etc.) en la arquitectura x86 o
bien virtualizar máquinas completas.
8) Linux dispone de un amplísimo soporte: no hay ningún otro sistema que
tenga la rapidez y cantidad de parches y actualizaciones que Linux, ni en los
sistemas privativos. Para un problema determinado, hay infinidad de listas
de correo y foros que en pocas horas pueden permitir solucionar cualquier
problema. El único problema está en los controladores de hardware recien-
te, que muchos fabricantes todavía se resisten a proporcionar, si no es para
sistemas privativos. Pero esto está cambiando poco a poco, y varios de los fa-
bricantesmásimportantesde sectorescomo tarjetasde vídeo (NVIDIA, ATI) e
impresoras (Epson, HP) comienzan ya a proporcionar los controladores para
susdispositivos, bien sean de código abierto, o binariosusablespor el núcleo.

Page 15
GNUFDL PID_00174426
15
2. Per sonalización o act ualización del núcleo
.
Como usuarios o administradores de sistemas GNU/Linux, debemos tener en
cuenta las posibilidades que nos ofrece el núcleo para adaptarlo a nuestras
necesidades y equipos.
Normalmente, construimos nuestros sistemas GNU/Linux a partir de la ins-
talación en nuestros equipos de alguna de las distribuciones de GNU/Linux,
ya sean comerciales como Red Hat, Mandriva o Suse, o “comunitarias” como
Debian y Fedora.
Estas distribuciones aportan, en el momento de la instalación, una serie de
núcleos Linux binarios ya preconfigurados y compilados, y normalmente te-
nemos que elegir qué núcleo del conjunto de los disponibles se adapta mejor
a nuestro hardware. Hay núcleos genéricos para una arquitectura, para un
modelo de procesador o bien orientados disponer de una serie de recursos
de memoria, otros que ofrecen una mezcla de controladores de dispositivos
[Ar05], posibilidades de virtualización, etc.
Otra opción de instalación suele ser la versión del núcleo. Normalmente las
distribuciones usan una versión para instalación que consideran lo suficien-
temente estable y probada como para que no cause problemas a los usuarios.
Por ejemplo, a día de hoy muchasdistribucionesvienen con una versión de la
rama 2.6.x del núcleo por defecto, que se consideraba la versión más estable
del momento en que salió la distribución. En algunos casos en el momento
de la instalación puede ofrecerse la posibilidad de usar como alternativa ver-
siones más modernas, con mejor soporte para dispositivos más modernos (de
última generación), pero quizás no tan probadas.
Los distribuidores suelen, además, modificar el núcleo para mejorar el com-
portamiento de su distribución o corregir erroresque han detectado en el nú-
cleo en el momento de laspruebas. Otra técnica bastante común en lasdistri-
buciones comerciales es deshabilitar prestaciones problemáticas, que pueden
causar fallos o que necesitan una configuración especifica de la máquina, o
bien una determinada prestación no se considera lo suficientemente estable
para incluirla activada.
Esto nos lleva a considerar que, por muy bien que un distribuidor haga el
trabajo de adaptar el núcleo a su distribución, siempre nos podemos encon-
trar con una serie de problemas u objetivos que no podemos realizar con la
situación actual:
__rendered_path__1
El núcleo Linux
__rendered_path__32
Personalización del
__rendered_path__33__rendered_path__34
núcleo
__rendered_path__33
La posibilidad de actualizar y
__rendered_path__32
personalizar el núcleo a
__rendered_path__37
medida ofrece una buena
__rendered_path__38
adaptación a cualquier
__rendered_path__38
sistema, lo que permite así
__rendered_path__37
una optimización y
sintonización del núcleo al
sistema destino.