Solución:
Esto se remonta a la historia algo tortuosa de Unix (Wikipedia tiene un diagrama simplificado, que está lejos de ser completo). En particular, durante un tiempo, hubo dos corrientes principales: el Sistema V desarrollado por AT&T y el BSD desarrollado en la Universidad de California, Berkeley. Esto fue a principios de la década de 1980, mucho antes de Linux (1991), y mucho menos de Ubuntu (2004). A menudo, estas dos corrientes tomaron decisiones diferentes, e incluso hoy en día encontrará la referencia ocasional a las variantes o características del “Sistema V” y “BSD”.
los ps
El comando se remonta a una de las primeras versiones de Unix (no estaba en la versión 1, la primera página de manual que puedo encontrar en línea es de la versión 5 (p.94) en 1974). En el momento, ps
solo tenía algunas opciones, por ejemplo ps a
mostraría todos los procesos en lugar de solo los del usuario, y ps x
mostraría procesos sin terminal adjunto. Notarás que las opciones no comienzan con -
: en ese momento, la convención de usar -
para las opciones no era casi sistemático como lo es hoy, era principalmente una cosa para los comandos que tomaban los nombres de los archivos como argumentos normales.
Con el tiempo, las diversas ramas de Unix se extendieron ps
con muchas más opciones. La variante BSD optó por conservar la sintaxis original, sin -
, y a
y x
todavía existen hoy. La variante System V eligió adoptar la convención sintáctica de -
para opciones, y usó letras diferentes (por ejemplo ps -e
para mostrar todos los procesos). Oracle (anteriormente Sun) Solaris es un ejemplo de una variante de System V (Solaris también envía una ps
ejecutable, en un directorio que no está en el predeterminado PATH
, para aplicaciones escritas con BSD en mente).
En el momento en que Linux entró en escena, las personas que lo usaban a menudo tenían experiencia previa con una variante de Unix u otra. Linux a veces hacía las cosas a la manera de System V, a veces a la manera BSD, a veces a su propia manera, ya sea en base a consideraciones técnicas o en base a la experiencia y los gustos de quien implementó la función. De Linux ps
El comando comenzó con opciones similares a BSD, p. ej. ps ae
para mostrar todos los procesos e incluir variables de entorno en la lista. Con el tiempo (a fines de la década de 1990, no recuerdo exactamente cuándo), los autores de Linux ps
opciones agregadas para las personas que estaban acostumbradas al Sistema V. ps ax
o ps -e
enumerará todos los procesos en Linux, e incluso hay una variable de entorno (PS_PERSONALITY
) para hacer ps
se comportan más como varias variantes antiguas de Unix, por el bien de los scripts antiguos y las personas con hábitos establecidos.
A las personas que usaban varias variantes de Unix no les gustaba tener que modificar sus programas y sus hábitos al cambiar de una variante de Unix a otra. Así que se hizo un esfuerzo por estandarizar un subconjunto de funcionalidades. Esto llevó al estándar POSIX (liderado por IEEE), que Ubuntu en general sigue. La primera edición cuyo alcance incluía la ps
El comando salió en 1992; éste no está disponible en línea, pero la edición de 1997 sí lo está. Para el ps
comando, como en muchos otros casos, POSIX adoptó la forma de hacer las cosas de System V.
los ps
La sintaxis estándar del comando es compatible con System V y POSIX. Además, se puede decir que esa sintaxis es estándar porque usa -
para introducir opciones por defecto. Algunas opciones existen solo en una de las dos sintaxis; afortunadamente se pueden mezclar en una misma convocatoria.
En términos generales, “BSD” frente a “System V” no tiene ninguna implicación técnica. Se refiere a la historia: “BSD” es cualquier elección que BSD hizo en la década de 1980 y sus alrededores, “System V” es cualquier elección que hicieron AT&T y sus socios (especialmente Sun). “POSIX” es cualquier elección que haya hecho el comité de estandarización de IEEE.
¿Cuál es la diferencia entre MS Office y LibreOffice? ¿Entre Firefox y Chrome?
Hacen aproximadamente lo mismo, pero son de diferentes personas con objetivos ligeramente diferentes.
Quizás la mejor pregunta es ¿Por qué las distribuciones BSD, Linux, OSX y Unix comparten asi que muchos comandos? Esto se reduce al cumplimiento de POSIX. POSIX es básicamente un conjunto de estándares para sistemas operativos similares a Unix; estipula la API principal, los comandos y cómo deberían funcionar esos comandos.
En el caso de ps
(un comando estipulado por POSIX) se exigen ciertos argumentos. Estos incluyen estos BSD. Todos los comandos derivados de POSIX tienen sus propias páginas de manual, pero necesitan una instalación por separado. Para ps
:
sudo apt-get install manpages-posix
man 1posix ps
Entonces, ¿por qué BSD no usa nuestro ps
(o viceversa)?
- Nuestro
ps
paquete (procps
ver:dpkg -S $(which ps)
) es un tenedor de otroprocps
paquete. Ambos tienen licencia GPL. Esto es incompatible con la licencia de BSD, por lo que no se puede incluir allí. (Nosotros podría incluir BSD pero no es necesario). -
ps
es bastante específico del kernel. Creo que son técnicamente incompatible.
¿Qué pasa con otras aplicaciones?
La mayoría de los comandos para el cumplimiento de POSIX provienen de Ubuntu coreutils
paquete. Este paquete representa GNU en GNU / Linux y también tiene licencia GPL. BSD envía sus propias versiones con licencia compatibles con BSD que se adhieren a POSIX pero no son necesariamente completamente iguales a sus contrapartes GNU.
ps
no es el único comando POSIX que no es GNU. Hay muchos de ellos.
Como dirijo con, ¿por qué deberían serlo? Son de diferentes personas durante mucho, mucho tiempo. Esa es la respuesta corta aquí.
La sintaxis ‘estándar’ a la que te refieres es en realidad el sistema operativo GNU que se desarrolló en la década de 1980. Las utilidades y la filosofía basadas en GNU se combinaron con el kernel de Linux para desarrollar la mayoría de las distribuciones de Linux modernas (incluido Ubuntu).
El sistema operativo BSD se desarrolló a fines de la década de 1970, independientemente de GNU, y luego se ramificó en versiones modernas como FreeBSD u OpenBSD.
Tanto GNU como BSD están inspirados en Unix y tienen filosofías, sintaxis, etc. ligeramente diferentes.