edición general
127 meneos
3348 clics
Abstinencia gráfica: viviendo la vida en el terminal [ENG]

Abstinencia gráfica: viviendo la vida en el terminal [ENG]

En el mundo moderno de hoy en día de aplicaciones basadas en navegador de varios gigabytes podemos llegar a estar abrumados por entornos gráficos que nos interrumpen continuamente. A veces es bueno reducir el tamaño y enfocarse al estilo VT100. Aprovechemos la potencia de la terminal para hacer las cosas con una selección de aplicaciones, utilidades y un par de juegos para la consola de Linux.

| etiquetas: abstinencia , gráfica , entorno gráfico , gui , terminal , tui , vt100
12»
  1. #96 Lo se y de hecho por consola es mejor y más rápido, pero ello no quita que existan alternativas de alto nivel, para gente con menos habilidades técnicas.
  2. #99 Generalmente administro una cantidad de servidores importante, la mayoría remotamente y sin terminal todo sería mucho mas lento. Es un dolor tener que administrar windows por el GUI.

    Cuando puedes administrar un directorio activo de Windows desde PowerShell será por alto ;)

    Sin embargo, para una persona que se encarga de un servidor que solo va a tocar un par de veces al año tener una interfaz gráfica para administrarlo es una bendición.
  3. #35
    Es lo que he dicho.
  4. #4 Fuera de lo que penséis los "gurús de la consola", las interfaces gráficas se crearon para facilitar la vida a las personas y para simular actos de la vida real. Por ejemplo el coger un archivo y moverlo a una papelera, como cuando tiramos un papel a una papelera. El escritorio se llama escritorio por simulación de un escritorio real, fuera de que existe algún programa que calca el funcionamiento de un escritorio físico.

    De hecho si lo miramos todo tan estrictamente como decís algunos, si os creéis tan buenos programadores deberías escribir todo en ensamblador o incluso código máquina, y no en lenguajes de alto nivel. Por eso usar la consola y luego programar con lenguajes de alto nivel demuestra bastante hipocresía y cinismo para luego poner a parir o creeros mejor que las personas que usan la interfaz gráfica, porque no quieren poner comandos o perder el tiempo (por ejemplo copiar una serie de archivos de una carpeta con seis-siete niveles de subcarpetas) cuando con la interfaz gráfica, antes que se acabe de poner los comandos necesarios y más en linux, que no se quien se le ocurrió la genial idea de poner C: como dev/hda1/...dev/sda1... para complicarlo todo más, acabas antes.

    Y sobre el tema de los manuales, está claro que muchos creadores de productos están más pensando en el dinero que van a ganar que en hacer bien su producto incluido los manuales que o son incompletos o son una mierda enorme. Esto hablando de los manuales de uso, ya no digo los técnicos...

    Pero bueno viendo lo que algunos entienden de diseño, seguridad, optimización de un software, aplicación, juego... tampoco podemos pedir peras al olmo.

    Llevo usando línea de comandos desde el nacimiento del CP/M y MSX-DOS 1.0 y sigo sin ver esa ventaja que decís algunas personas que hay. Y por cierto el buffer de comandos o memoria donde se guardan, no es infinito.

    Salu2
  5. #28 Las risas es que mientras él va buscando el comando que usó en su día para copiar un archivo, con la interfaz copias veinte veces lo mismo antes.

    Salu2
  6. #90
    Hay cosas que un usuario normal también hace como renombrar conjuntos de ficheros. Eso con comandos script se arregla rápido.
  7. #80
    Te olvidaste mencionar GNU, ¿o querías decir GNU al mencionar a Linux?
  8. #1 Obviamente no eres administrador de sistemas
  9. #37 :qw!

    Ahora en serio, donde este nano que se quite vi/vim
  10. Recomiendo neomutt antes que mutt
  11. #21 Para una buena parte de lo que cita no necesita scripting, solo programas de consola:

    - encontrar en un árbol de directorios todos los ficheros que se llamen de una determinada manera: find
    - ver si contienen una determinada linea: find + xargs + grep
    - sustituir ciertos caracteres de esa linea por otros: sed? tr? Dependerá de la complejidad de la sustitución, de los ficheros, etc., pero en principio puede valer.
    - quedarme con el path de los ficheros modificados: salida de find + xargs + grep -l
  12. #30 O un CDE en una máquina con OS SCO...
  13. #4 sí y no. depende qué. con comandos que utilizas a menudo que requieren de parámetros que varían mucho es mas ágil:no es un paso atrás como apuntan otros comentarios: es mas ágil, flexible y eficiente que rellenar un montón de inputs con opciones cada vez que quietes ejecutar algo y por tanto mas "moderno" en realidad.
    Cuando tienes que utilizar miles de comandos (cada uno con sus parámetro) llega un momento que tienes que apuntarlo. Ahí ya pierdes eficiencia
    . Para buscar (descartar, seleccionar..) por ejemplo logs con grep ya es una pesadilla comparado con sistemas tipo loghash, new relic,.. Sistemas que visualmente disminuyen el esfuerzo visual, y por tanto mejor. Autocompletar va bien, si recuerdas hasta un grado de parámetros, sinó, entonces no es una solución.
  14. #109 qué pretendías escribir con ":qw!"? se nota que no eres de vim porque eso no va a funcionar :roll:

    Tienen nano grabadora de macros y plugins? porque igual lo pruebo si es así
  15. #1 Pues yo desde que he tenido que aprender a usar la consola la prefiero a casi cualquier GUI. También es que para programar la consola me parece lo mejor. Prefiero vim y tmux que cualquier suit.

    Para otras cosas sí que prefiero la GUI. En mi caso, uso lo que más me conviene para la tarea entre manos.
  16. #107 Hablaba de linux en general..... incluyendo las distribuciones de los routers que utilizan generalmente musl en vez de glib.
  17. #116
    Pero es que entonces no es Linux sino POSIX :-P
    Glib por otra parte es la biblioteca de GNOME, no sirve para lo mismo que musl.
  18. #117 La combinación kernel linux + musl es mayoritaria en routers que en el mejor de los casos tienen un GUI via web con algunas de las opciones que puede realizar el cacharro.
    Y esos router con kernel linux + musl, ¿como llamamos al SO.?
  19. #100 Y el indispensable screen para servidores: ftp.gnu.org/gnu/screen/
  20. #118
    Musl con Linux o Musl{/,-,+}Linux o sistemas Musl.
    No hay forma corta de denominarlos.
  21. #120 Hay otra duda que me gustaría despejar.
    ¿Si la distribución utiliza herramientas de BSD como por ejemplo openssh debería llamarse GNU/BSD/Linux?
    O esa denominación solo esta "marcada" por la librería de C contra la que estén enlazadas las aplicaciones.

    Al final esto va a ser como el famoso "Linux is not unix".
  22. #121
    Lo que define el SO es la API del mismo. Dicha API tiene su parte de espacio no privilegiado y de espacio privilegiado.
    Hay por tanto dos componentes fundamentales: la biblioteca de C y el núcleo. La inclusión de OpenSSH no cambia el sistema operativo.

    En la imagen adjunta hay un esquema del equivalente en Darwin en su variante (distribución) macOS. macOS es una distribución de Darwin + Cocoa y otras bibliotecas de Apple. Además de la de Apple sólo conozco otra variante de Darwin que es GNU Darwin. En el caso de GNU con Linux tienes variantes como Debian, Ubuntu, Fedora, Red Hat aunque todas comparten cosas como SystemD o GLib. De hecho es irrelevante porque todas admiten cambiar dichos componentes. Si quisieras cambiar la biblioteca de C o el núcleo tendrías que modificar un buen puñado (sino todos) los paquetes de sus repositorios y recompilarlos (todos) ...  media
  23. #109 donde esté la bicicleta que se quite el avión
  24. #44 amo vim, uso vim, recomiendo aprender vim a cualquiera que administre o programe... es de lo mejor, pero para programar hay cosas mucho más específicas que te hacen más poderoso. Jetbrains se llamará mi primer hijo xD
  25. #124 los de jetbrains son unos quemacpu... Igual para alguna cosa concreta como Android puede tener sentido, para Ruby te digo yo que no.
  26. #119 Cierto. Te recomiendo que le eches un ojo a tmux, vendría a ser el sustituto de screen, mucho más funcional.

    Gracias por aportar algo interesante a este tema! Más de un centenar de posts y casi todo de trolls para ver quién la tiene más grande :-S .
  27. #126 Mi problema es que aunque no demasiados, aun tengo que administrar servidores hp-ux y screen haciendo piruetas funciona.
  28. #122 Existe la posibilidad de hacer una distribución que contenga una parte de las utilidades de usuario enlazadas contra glibc y otra parte contra musl u otra implementación de libc. Esto que digo es medianamente fácil conseguirlo con Gentoo o LFS. No se suele hacer por razones practicas pero es posible.
    Incluso se puede llegar a enlazar parte de la herramientas gnu contra musl.

    En cuanto a que se puede llamar Linux, el propietario de la marca dice que todo lo que lleve el kernel.
    Recordemos que mi mención fue a todo el ecosistema de kernel linux independientemente de si se utiliza glibc.
    Algo similar a cuando nos referimos a unix que englobaría linux.

    Si nos atenemos a la lista de las distribuciones "dignas" de llevar el GNU este es el resultado según la FSF:
    www.gnu.org/distros/free-distros.html
  29. #128
    Si utilizas aplicaciones enlazadas con Musl dichas aplicaciones están diseñadas para Musl (con Linux o el núcleo que sea). ¿Qué es sino Wine?
    ¿No es posible acaso virtualizar un sistema operativo dentro de otro? ¿Qué es sino LXC? ¿VirtualBox?
    ¿Significa eso que las aplicaciones con Wine están hechas para Linux? ¿y lo que ejecutes dentro de VirtualBox también? ¿y lo que ejecutes con LXC también?
    La respuesta es no.

    Linux es una marca registrada, pero no es una marca de sistema operativo sino de núcleo de sistema operativo.

    Y lo siento, pero el ecosistema de Linux no es único. No existe eso de «ecosistema Linux». Musl es incompatible con GLibc entre otras razones porque no implementa el GNU C. Aquí tienes una comparativa básica entre distintas bibliotecas de C: www.etalabs.net/compare_libcs.html
    Los programas han de ser programados específicamente para cada biblioteca de tiempo de ejecución de C.

    Por otra parte decir "kernel Linux" es redundante.
    Tampoco comprendo para qué preguntas nada.
  30. #128
    El listado de distribuciones de GNU con Linux que indicas es de distribuciones 100% libres. Que no sean 100% libres no significa que no sean sistemas operativos de GNU con Linux.
  31. #129 Musl, uClibc, Glibc son implementaciones de la biblioteca estándar.
    es.wikipedia.org/wiki/Biblioteca_estándar_de_C

    No son ningún emulador.

    Creo que esta discusión se esta alargado porque usted piensa que siempre hay que pasar por glibc para llegar al API del kernel.
    Estamos hablando del proceso de lanzado (link) de programa al construir el binario.
  32. #130 Vamos a hacer otro enfoque del asunto.

    Un par de ejemplo de distribuciones que no se autodenominan GNU:
    www.centos.org/about/
    www.gentoo.org/get-started/about/

    En Centos podría tener sentido ponerle el GNU porque funciona casi exclusivamente utilizando glibc, pero en el caso de Gentoo te mentirían porque puedes construir el sistema sin glibc.

    Otra cosa es como le gustaría a la FSF que se denominaran, que no es obligatorio.
  33. #131 Proceso de enlazado (link). Mil perdones.
  34. #114 tu sabias que las preguntas mas buscadas de stackoverflow es como salir de vi/vim ?

    Y esa orden al menos en vi es un salir a las bravas guardando
  35. #131 #132
    Wine tampoco es ningún emulador. WINE significa Wine Is Not an Emulator.
    La Biblioteca estándar de C es una cosa.
    La Biblioteca estándar de C de POSIX es otra cosa.
    La Biblioteca estándar de C de GNU es otra cosa.
    La Biblioteca estándar de C de Musl es otra cosa.
    La Biblioteca estándar de C de uClibc es otra cosa.
    La Biblioteca estándar de C de Bionic es otra cosa.
    WINE (o Wine) implementa la Biblioteca estándar de C de Microsoft. Y ésta es otra cosa.

    Todas ellas incompatibles entre sí.

    Cómo se denominen a sí mismas las distribuciones de GNU con Linux es irrelevante. La extrema derecha no se autodenomina como extrema derecha y no por ello dejan de ser extrema derecha.

    En los repositorios de Gentoo tienes software preparado para GNU con GNU Hurd. Igual que en Debian. Ese mismo software está preparado para GNU con Linux. Gentoo además dispone de software preparado para Musl con Linux y uClibc con Linux. Eso son tres sistemas operativos distintos.

    GNU-Linux es Linux junto con la biblioteca de tiempo de ejecución de GNU, las utilidades nucleicas de GNU (coreutils), las utilidades binarias de GNU (binutils) y un largo etcétera entre los que se incluye el dialecto de C de GNU. El uso de cualquiera de ellos convierte al programa en diseñado para ser compatible con GNU.

    Si se llama biblioteca de tiempo de ejecución de GNU (GNU C runtime library) es por algo :roll:
    Y es que dispone de funcionalidad específica de GNU y que si eres compatible con GNU eres incompatible con otros SOs salvo que lo hagas multiplataforma y tengas código que abstraiga todas las particularidades para poder explotar al 100% cada SO. La biblioteca de tiempo de ejecución de GNU realiza operaciones que otras bibliotecas de tiempo de ejecución no realizan.
    Una comparación con algunas cosas: www.etalabs.net/compare_libcs.html

    Con la GNU C runtime library también se incluye GNU ld, el cargador de binarios ejecutables y bibliotecas. Por cierto, dlopen() se incluyó en POSIX 2001 después de llevar bastante tiempo en la GNU C runtime library.
    POSIX.1-2001 describes dlclose() and dlopen(). The dlmopen() function is a GNU extension.

    The RTLD_NOLOAD, RTLD_NODELETE, and RTLD_DEEPBIND flags are GNU extensions; the first two of these flags are also present on Solaris.

    Luego está también el tema de la ABI, caso en el cual todos imitan la de GCC ... así que si fuera por eso todo sería GNU pero supongo que eso ya no gusta.

    Extensiones GNU C: gcc.gnu.org/onlinedocs/gcc/C-Extensions.html#C-Extensions
    Extensiones sólo para GNU C++: gcc.gnu.org/onlinedocs/gcc/C_002b_002b-Extensions.html#C_002b_002b-
    ABI de GNU:
    * gcc.gnu.org/onlinedocs/libstdc++/manual/abi.html
    * gcc.gnu.org/onlinedocs/libstdc++/manual/using_dual_abi.html

    Explicaciones acerca de la ABI: en.wikipedia.org/wiki/Application_binary_interface
    * Convención para llamadas a procedimientos
    ** en.wikipedia.org/wiki/Calling_convention
    ** Arquitectura x86 dispone de múltiples formas. En el mundo POSIX actual se utiliza la de GCC (GNU): en.wikipedia.org/wiki/X86_calling_conventions
    * Formato del binario. Aunque hay un estándar, el ELF, si usas GNU ld o gold el binario tiene ciertas extensiones con información adicional, útiles para depurar o modificar el comportamiento a la hora de buscar bibliotecas: en.wikipedia.org/wiki/Rpath Gracias al Rpath configurado por GNU ld puedes modificar en un sistema GNU-Linux el archivo /etc/ld.so.conf con rutas adicionales para bibliotecas. Siempre habrá otros que lo imiten para ser compatibles con GNU.
    * Cómo hacer las llamadas a sistema. La GNU libc provee facilidades para realizar llamadas a sistema mediante la función syscall().

    En serio, déjalo.
  36. #135
    En los repositorios de Gentoo tienes software preparado para GNU con GNU Hurd. Igual que en Debian. Ese mismo software está preparado para GNU con Linux. Gentoo además dispone de software preparado para Musl con Linux y uClibc con Linux. Eso son tres sistemas operativos distintos.

    Y no se pueden instalar al mismo tiempo. Son incompatibles entre sí. Se requiere recompilar dicho software.
  37. #135 Evidentemente el software que utilice las extensiones de GNU solo se puede enlanzar contra glibc. No es el caso de por ejemplo busybox, xfce.
    Como ejemplo esta Alpine Linux.

    La incompatibilidad de la que usted habla solo ocurre si se utilizan las extensiones de GNU.
    Ejemplo sencillo.

    ====== hola.c =====
    #include <stdio.h>

    int main(void)
    {
    printf("Hola Mundo");
    return 0;
    }
    =================
    $ musl-gcc -o hola_musl hola.c
    $ ./hola_musl
    Hola Mundo
    $ objdump -T hola_musl

    hola_musl: formato del fichero elf64-x86-64

    DYNAMIC SYMBOL TABLE:
    0000000000000000 DF UND 0000000000000000 puts
    0000000000000000 DF UND 0000000000000000 __libc_start_main
    0000000000601030 g D .data 0000000000000000 _edata
    0000000000601038 g D .bss 0000000000000000 _end
    0000000000400390 g DF .init 0000000000000002 _init
    0000000000601030 g D .bss 0000000000000000 __bss_start
    00000000004004dc g DF .fini 0000000000000002 _fini

    $ gcc -o hola_gcc hola.c
    $ ./hola_gcc
    Hola Mundo
    $ objdump -T hola_gcc

    hola_gcc: formato del fichero elf64-x86-64

    DYNAMIC SYMBOL TABLE:
    0000000000000000 w D UND 0000000000000000 _ITM_deregisterTMCloneTable
    0000000000000000 DF UND 0000000000000000 GLIBC_2.2.5 puts
    0000000000000000 DF UND 0000000000000000 GLIBC_2.2.5 __libc_start_main
    0000000000000000 w D UND 0000000000000000 __gmon_start__
    0000000000000000 w D UND 0000000000000000 _ITM_registerTMCloneTable
    0000000000000000 w DF UND 0000000000000000 GLIBC_2.2.5 __cxa_finalize

    ¿Como se ha producido el milagro? No utilizando las extensiones de GNU.

    Incluso podemos hacer un cutre programa demo sin pasar por librería estándar (versión solo para amd64).

    ====== syscall_a_pelo.c =====
    void _start() {
    asm("mov $60,%rax; mov $0,%rdi; syscall");
    }
    =========================

    gcc -nostdlib syscall_a_pelo.c

    Evidentemente si quiero Gnome tengo que utilizan glibc.
  38. #137
    Es evidente que si usas extensiones de GNU tendrás que enlazar con la GNU C o cualquier otra compatible con GNU C. Y si no utilizas extensiones de GNU utlizarás el C normal o el POSIX que ha sido influenciado por GNU. ¿Y qué tiene eso de relevante? Tu aplicación será compatible con GNU y otros sistemas operativos.

    ¡Viva el vino! ¡viva el Wine! ¡no soy de extrema derecha!

    Que no uses las extensiones de GNU no significa que tu programa no se esté ejecutando con la ABI de GNU. Y no significa que tu programa no esté diseñado para funcionar con GNU. ¿Cuál es el cargador que estás utilizando para el binario? :-P

    La primera aplicación diría que es para Musl con Linux:
    La primera aplicación utilizas el linker y cargador de Musl:
    %(cc1_cpu) -nostdinc -isystem /usr/include/x86_64-linux-musl -isystem include%s
    dynamiclinker /lib/ld-musl-x86_64.so.1 -nostdlib %{shared:-shared} %{static:-static} %{rdynamic:-export-dynamic}

    ls -d /usr/include/x86_64-linux-*
    /usr/include/x86_64-linux-gnu /usr/include/x86_64-linux-musl

    Y la segunda aplicación es para GNU con Linux. Pero el mismo binario no te funcionará con los dos sistemas operativos.

    GNU con Linux y Musl con Linux. ¡Que chorprecha!

    Paquete musl-tools en Debian. También podrías recompilarla contra Wine y tendrías una aplicación compatible con Windows. Esa misma aplicación la podrías recompilar para Darwin y sería una aplicación para Darwin además de GNU o Musl. Felicidades, has realizado una aplicación portable. Eso no cambia el sistema operativo que esté usando según contra qué esté enlazado y con qué sea cargado el binario en el momento de su ejecución.
  39. #134 si puede ser yo mismo hace años lo busqué no es nada intuitivo.

    Pues acabo de aprender el :wq! Para forzar escribir en archivos de solo lectura y salir. :->
  40. #138 Cada vez va usted mezclando mas las cosas.

    En #135 hace una afirmación asombrosa. Que la biblioteca estándar de C (ISO C99) , posix (POSIX.1-2008), musl y uClibc son incompatibles.
    Lo que yo conozco:
    Posix engloba todo el ISO C mas sus funciones.
    Glibc engloba todo Posix y por ende ISO C mas sus funciones.
    Musl engloba todo Posix y por ende ISO C mas sus funciones con la excepción de pthread.h
    uClibc engloba Posix y por ende ISO C. Es modular siendo posible excluir por ejemplo IPV6 u otros compones. Es muy util para sistemas empotrados.

    Por lo tanto si se realiza un programa que cumpla con ISO C es enlazable con todas las anteriormente mencionadas. Como los cutre ejemplo que puse.

    Otra afirmación asombrosa es la realizada en #138 "También podrías recompilarla contra Wine y tendrías una aplicación compatible con Windows". Realmente lo que se puede hacer es lo contrario. Programa fuente diseñado para windows.... compilarlo y enlazarlo como ELF incluyendo la conversión de llamadas win a linux syscall, D3D a opengl y mfc a Xwin entre otras conversiones. Pero insisto... la dirección es Windows ---> Linux.

    Hay otro concepto que nombra en #138, donde menciona un tal "cargador". No se si se refiere al compilador, el enlazador, el ensamblado.
    Si se refiere al compilador... no es importante, puesto que utilizando clang, el compilador de intel, u otro que cumpla con ISO C99 los cutre ejemplos que puesto funcionaran. Lo realmente importante son las opciones de enlazado (linker) que son las que dictaminan si se necesitaran librerías dinámicas y cuales serán.
    Siempre es instructivo: www.calleerlandsson.com/posts/the-four-stages-of-compiling-a-c-program
    Una forma de comprobar las llamadas en un ELF es objdump -T <binario elf> si existen las llamadas a librerías dinámicas y al kernel.
    En el caso del ejemplo enlazado con musl hay 0 llamadas que no al sean al kernel.


    En el caso de Alpine Linux dice usted que debería llamarse Alpine Posix.
    alpinelinux.org/about/

    ¿Y en el caso de Gentoo? ¿A veces GNU/Gentoo a veces Posix/Gentoo? ¿Depende/Gentoo?
    Le recuerdo que si utiliza solo aplicaciones posix en gentoo como openrc, xfce, xorg, etc... puede migrar de glibc a uClibc y viceversa recompilando el sistema.

    P.D.: No entiendo la invocación a la ultra-derecha.
  41. #140
    Todo ese rollo para decir lo que ya he dicho: que si compilas con el ISO C influenciado por GNU igual que POSIX C también influenciado por GNU el programa es portable y funcionará con cualquier sistema operativo, incluyendo Windows aunque no lo quieras reconocer. Pero ese hecho no cambia que el sistema operativo en ejecución sea GNU con Linux, Musl con Linux o GNU con GNU Hurd o GNU con NT.

    Si no sabes qué significa "cargador" (del inglés loader) difícilmente comprenderás el funcionamiento de Wine, lo que es normal ya que tú mismo has dicho que es un emulador. Y no es un emulador. ELF, PE, Winelib o Mach-O. Todo es lo mismo. El cargador lo abstrae.

    wiki.winehq.org/Wine_Developer's_Guide/Architecture_Overview

    Insiste todo lo que quieras, Wine va en dos direcciones.


    En el caso del ejemplo enlazado con musl hay 0 llamadas que no al sean al kernel.
    En ninguno de los dos casos hay llamadas al kernel. Sólo hay llamadas a la biblioteca de tiempo de ejecución de C.
    El ejemplo que pusiste a posteriori utilizando la llamada a sistema directamente elimina el uso de una biblioteca de C del sistema operativo que haya por defecto en la máquina. De hecho es una reimplementación de la biblioteca de C del sistema operativo, creando tu propia variante de SO.

    ¿Y en el caso de Gentoo? ¿A veces GNU/Gentoo a veces Posix/Gentoo? ¿Depende/Gentoo?
    Le recuerdo que si utiliza solo aplicaciones posix en gentoo como openrc, xfce, xorg, etc... puede migrar de glibc a uClibc y viceversa recompilando el sistema.

    xfce.org/download/changelogs/4.12
    GTK+ dependency >= 2.24 and GLib >= 2.30.
    mirrors.edge.kernel.org/pub/linux/libs/uclibc/Glibc_vs_uClibc_Differen
    XFCE utiliza GTK, depende de Glib que es la biblioteca de GNOME, perteneciente al proyecto GNU, casualmente pensada para Glibc. Cada sistema operativo con Linux habrá realizado las adaptaciones que haya creído convenientes.
    OpenRC no es más que un conjunto de scripts y un proceso init que los ejecuta, eso no parte definitoria del sistema operativo. No cambia la API del SO. Pero sí que es cierto que dicho proceso init debe estar preparado para ser compatible con GNU, Musl, uClibc, Bionic o lo que sea.

    Si migras de una a otra recompilando significa que ya tienes que andar adaptando de un sistema operativo a otro. De hecho las diferencias entre uClibc y Glibc (o cualquier otra biblioteca) te obligan a realizar trabajo adicional para portar programas, por mucho que cumplas con POSIX. Las bibliotecas también tienen bugs y cada una tiene los suyos. Por otra parte nadie se ciñe exclusivamente a POSIX. Es una definición básica e insuficiente. Eso sí, cada vez meten más cosas de GNU, igual que en el ISO C.

    R no compila con uClibc (2012): stat.ethz.ch/pipermail/r-help/2012-August/321428.html
    Qt no se ha portado a Musl (2017): github.com/voidlinux/void-packages/issues/6893 Los de void Linux no han continuado con el port. Así que no tienes Qt 5.9 en Musl con Linux. Por el momento. Habrá que conformarse con Qt 5.43:
  42. #141 Podemos discutir si xfce+gtk3+cairo+etc fuera de glibc es seguro o eficiente, pero posible es.

    Yo para compilar programas de C de linux en windows solo he conseguido resultados con Mingw.  media
  43. #139 Pues aquí te dejo una respuesta de stackoverflow, todas las formas de salir de vi/vim

    stackoverflow.com/questions/11828270/how-to-exit-the-vim-editor

    Para mi el mas util es el :wq! para salir por las bravas guardando o el :q! para salir sin guardar
  44. #143 es que no se me había dado el caso de tener que escribir en un archivo sin permiso de escritura siendo el fichero de mi usuario. Pero está bien saberlo.
  45. #142
    Y dirás "Podemos discutir si xfce+gtk3+cairo+etc fuera de GNU con Linux es seguro o eficiente, pero posible es." Y eso sólo es posible con la labor de porting necesaria, como la labor de porting necesaria para tener Qt en Windows. Es decir, estás programando específicamente para el sistema operativo que sea: GNU, uClibc, Musl, etc. Cada SO tiene sus propios bugs y aunque uClibc pretenda ser compatible con GNU nunca lo será con sus bugs. Si quiere 100% compatibilidad ha de imitar incluso los bugs de GNU. Si no los imita entonces la aplicación deberá ser modificada para soportarla.

    No son programas de Linux, porque no existen los programas para Linux. Y por lo que veo no sabes compilar un programa ISO C contra Wine o contra Windows. He dicho compilar para cada sistema operativo, no he hablado de binario único en ningún momento. Empieza por ahí y quizá termines entendiendo algo de todo este galimatías.
  46. #145 Cuando hablo de programas Linux me estoy refiriendo a binarios ELF marcados en la cabecera con e_ident[EI_OSABI]=0x03, independientemente de las dependencias que tengan. Como si están construidos en asm llamando solo al api del kernel.

    Usted afirma que eso no existe. Me parece bien, es una opinión respetable.
  47. #146
    Son programas para distintos sistemas operativos, entre ellos GNU con Linux, Musl con Linux y uClibc con Linux.

    No son programas para Linux. El ELF no define el sistema operativo para el que está diseñado un programa como tampoco lo define el valor del parámetro EL_OSABI (ELFOSABI). Lo que define es para qué núcleo de sistema operativo o sistema operativo se ha generado el binario.

    Está bien que ignores todo lo que se te ha rebatido. Sigue así, llegarás lejos. ¿Te crees que los demás son tontos o qué?

    Los valores hard coded no son definitorios (como tampoco lo es el GNU/Linux que aparece al ejecutar el comando uname -o). De todas maneras pongo aquí cómo está definido EI_OSABI y sus posibles valores. El valor 0x03 de EI_OSASBI se corresponde con ELFOSABI_GNU.

    sourceware.org/git/?p=glibc.git;a=blob;f=elf/elf.h;h=7e2b072a7f75451c0
    135 #define EI_VERSION 6 /* File version byte index */
    136 /* Value must be EV_CURRENT */
    137
    138 #define EI_OSABI 7 /* OS ABI identification */
    139 #define ELFOSABI_NONE 0 /* UNIX System V ABI */
    140 #define ELFOSABI_SYSV 0 /* Alias. */
    141 #define ELFOSABI_HPUX 1 /* HP-UX */
    142 #define ELFOSABI_NETBSD 2 /* NetBSD. */
    143 #define ELFOSABI_GNU 3 /* Object uses GNU ELF extensions. */
    144 #define ELFOSABI_LINUX ELFOSABI_GNU /* Compatibility alias. */

    145 #define ELFOSABI_SOLARIS 6 /* Sun Solaris. */
    146 #define ELFOSABI_AIX 7 /* IBM AIX. */
    147 #define ELFOSABI_IRIX 8 /* SGI Irix. */
    148 #define ELFOSABI_FREEBSD 9 /* FreeBSD. */
    149 #define ELFOSABI_TRU64 10 /* Compaq TRU64 UNIX. */
    150 #define ELFOSABI_MODESTO 11 /* Novell Modesto. */
    151 #define ELFOSABI_OPENBSD 12 /* OpenBSD. */
    152 #define ELFOSABI_ARM_AEABI 64 /* ARM EABI */
    153 #define ELFOSABI_ARM 97 /* ARM */
    154 #define ELFOSABI_STANDALONE 255 /* Standalone (embedded) application */

    Definición de EI_OSABI:
    EI_OSABI The eighth byte identifies the operating system and
    ABI to which the object is targeted. Some fields in
    other ELF structures have flags and values that have
    platform-specific meanings; the interpretation of
    those fields is determined by the value of this byte.
    For example:

    ELFOSABI_NONE Same as ELFOSABI_SYSV
    ELFOSABI_SYSV UNIX System V ABI
    ELFOSABI_HPUX HP-UX ABI
    ELFOSABI_NETBSD NetBSD ABI
    ELFOSABI_GNU GNU ABI // también conocido como ELFOSABI_LINUX (alias de compatibilidad): code.woboq.org/userspace/glibc/elf/elf.h.html
    ELFOSABI_SOLARIS Solaris ABI
    ELFOSABI_IRIX IRIX ABI
    ELFOSABI_FREEBSD FreeBSD ABI
    ELFOSABI_TRU64 TRU64 UNIX ABI
    ELFOSABI_ARM ARM architecture ABI
    ELFOSABI_STANDALONE Stand-alone (embedded) ABI


    ¿Sabías que en www.kernel.org/ encontrarás el código fuente de Linux y que Linux se define a sí mismo como sistema operativo? ¿Sabías que dicha definición fue cambiada al pasar a Linux 2.x? ¿sabías que la definición original, que se corresponde con la realidad, era la de núcleo de sistema operativo?
  48. #147 github.com/torvalds/linux/blob/master/include/uapi/linux/elf.h#L360

    Yo entiendo que cuando usted habla de GNU/Linux esta acotando al uso de glibc y que cuando alguien habla de Linux se refiere a una clasificación mas genérica.
    Pero me niega que se pueda hacer una clasificación superior. Igual puede negarme el uso del termino "Sistema Operativo" que sería una clasificación aun superior.

    En todo caso es un asunto controvertido y mi actitud con el tema es flexible. En ningún momento quito relevancia a las implementaciones GNU, que en general son las mejores y utilizo masiva-mente.
  49. #148
    Cuando hablo de GNU con Linux no acoto sólo al uso de Glibc. También a ld.so y Linux. Acoto a un sistema operativo.
    github.com/torvalds/linux/blob/master/include/uapi/linux/elf.h#L38
    No se puede realizar una clasificación más genérica. De GNU con Linux, Musl con Linux o uClibc con Linux se pasa a sistemas operativos con Linux o UNIX - System V, puesto que como ya hemos visto, el ABI del ELF es del todo irrelevante cuando se habla de sistemas tipo Unix.
    Porque, ¿qué ocurre con las aplicaciones Windows que funcionan con Wine? ¿y qué ocurre con las aplicaciones para Android? ¿significa eso que las aplicaciones Wine están diseñadas para GNU con Linux? ¿y LXC? ¿y VirtualBox?
    El formato del ejecutable es irrelevante, no define en ningún momento el sistema operativo objetivo. Basta con que ld.so reconozca el formato de ejecutable requerido para que cargue el binario y busque las bibliotecas dinámicas requeridas para dicho formato de binario.

    ¿Bash es para GNU o para Linux o para UNIX System V? (ELFOSABI_NONE 0 /* UNIX System V ABI */ ELFOSABI_SYSV 0 /* Alias. */)
    readelf -h /bin/bash
    Encabezado ELF:
    Mágico: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00
    Clase: ELF64
    Datos: complemento a 2, little endian
    Versión: 1 (current)
    OS/ABI: UNIX - System V
    Versión ABI: 0
    Tipo: DYN (Fichero objeto compartido)
    Máquina: Advanced Micro Devices X86-64
    Versión: 0x1
    Dirección del punto de entrada: 0x31520
    Inicio de encabezados de programa: 64 (bytes en el fichero)
    Inicio de encabezados de sección: 1111712 (bytes en el fichero)
    Opciones: 0x0
    Tamaño de este encabezado: 64 (bytes)
    Tamaño de encabezados de programa: 56 (bytes)
    Número de encabezados de programa: 9
    Tamaño de encabezados de sección: 64 (bytes)
    Número de encabezados de sección: 28
    Índice de tabla de cadenas de sección de encabezado: 27
  50. #149 Tiene usted razón. El campo e_ident[EI_OSABI] en la cabecera del ELF es ignorado.

    En #80 yo hablo de tuberías (pipes), expansión de parámetros, expresiones regulares. Todo esto se puede conseguir, sin utilizar GNU, contra un ABI de núcleo Linux con software ya existente. De igual manera se puede crear un ELF en estático para el ABI de kernel linux sin incluir nada de GNU.

    Como este tema esta hiriendo sensibilidades en el futuro empleare el termino "Sistemas con ABI de kernel Linux" y le pido disculpas por utilizar algunas fuentes de información incorrectas como las siguientes:
    www.gentoo.org/get-started/about/
    www.openssh.com/portable.html
    www.centos.org/about/
    en.wikipedia.org/wiki/Linux
  51. #150
    Las tuberías aquí no tienen nada que ver. Sin utilizar GNU, pero utilizarás otra cosa porque esto es un sistema tipo UNIX y el núcleo no lo tocas ni con un palo. Al crear una tubería puede que obtengas un descriptor de fichero reutilizado por la Biblioteca de tiempo de ejecución de C que mantuviera en espera para mejorar el rendimiento, como ocurre con la memoria dinámica o los hilos en el caso de GNU OpenMP y GNU NPTL. La ABI que utiliza el usuario es la de GNU o Musl o la del espacio de usuario que sea. La ABI del núcleo solo la utiliza la ABI de la Biblioteca de tiempo de ejecución de C correspondiente, da igual si está integrada en la aplicación o se carga dinámicamente. La aplicación utiliza la ABI de la Biblioteca de tiempo de ejecución de C. No es posible acceder a la ABI del núcleo porque interferiría con las gestiones de la Biblioteca de tiempo de ejecución de C.

    Es una pena que pretendas utilizar como fuentes webs que utilizan conceptos erróneos continuamente.
  52. #102 Hombre cuando la gente suele hablar de servidores, no esta hablando de Windows Servers... cuyo uso, de cara a servicios en internet es practicamente nulo, si no de Linux/UNIX, en los que puedes hacer que un script se suba y se ejecute en cientos de maquinas de forma simultanea, o en los que la configuracion de varios servicios es literalmente, descomprimir un archivo de texto y reiniciar dicho servicio.

    No comparemos servidores de oficina con servidores de internet o supercomputadores... es como comparar patinetes de xiaomi con ferraris o camiones...
  53. #104 Pues si llevas usando todos esos años la consola y no ves ventajas, poco la has usado.

    Ventaja principal: Scripting, concatenación de comandos, volcado de salidas, etc.... lo scripteas una vez y lo tienes para siempre.

    Lo de la "genial idea" de llamar a C: como /dev/sda1, etc, es para poder distinguir discos en unidades Raid o LVM, en los que tu "c:" puede ser mezcla de 4-5 o mas discos duros fisicos diferentes, de diferentes tamaños actuando como uno único (¿magia verdad? Y si supieras que puedes usar la RAM como disco.... hay que ver que cosas se pueden hacer con algo de conocimiento y el sistema adecuado)
  54. La memez más absoluta ya es el visor de mapas en ASCII, eso no lo usa ni el propio creador. Tanto luchar por pantallas con millones de colores, full HD, 4k, low latency, etc para tirar por tierra todo. Es como si alguien plantease hacer ruedas de coche de madera...
  55. #21 Pero como voy a confundir terminal con scripting, hombre, si llevo 30 años programando en multiples lenguajes, administrando y manipulando ordenadores de todos los tipos. Lo que yo he dicho se hace simplemente en un terminal con un par de comandos o tres en pocos segundos.
  56. #58 Es algo mas complicado y requiere mas tiempo y recursos. No hay mas preguntas, su señoria.
12»
comentarios cerrados

menéame