mudarse de Windows a Linux [cerrado]

57

Necesito conciliar estos 2 hechos:

  1. No me siento cómodo trabajando en Linux;
  2. Necesito desarrollar software para Linux.

Algunos antecedentes: tengo más de 10 años de experiencia en programación en Windows (casi exclusivamente C / C ++, pero también algunos .NET), fui usuario de FreeBSD en mi hogar durante aproximadamente 3 años (luego tuve que volver a Windows), y nunca he tenido mucha suerte con Linux. Y ahora tengo que desarrollar software para Linux. Necesito un plan

En Windows, puede salirse con solo conocer un lenguaje de programación, una API con la que está codificando, su IDE (VisualStudio) y algunas herramientas muy básicas para la resolución de problemas (depende, ProcessExplorer, DebugView, WinDbg). Todo lo demás viene naturalmente.

En Linux, es una historia muy diferente. ¿Cómo demonios sabría qué DLL (perdón, Objeto compartido) se cargaría si lo vinculo desde el complemento de Firefox? ¿Cuál es el equivalente de Linux de insertar __asm ​​int 3 / DebugBreak () en la fuente y ejecutar el programa, y ​​luego dejar que el sistema operativo llame a un depurador? ¿Por qué demonios las versiones de lanzamiento usan algo llamado appLoader, mientras que las versiones de depuración funcionan de alguna manera diferente? Lo peor de todo: ¿cómo aprovisionar el entorno de desarrollo de Linux?

Entonces, teniendo en cuenta que el odio generalmente se asocia con no saber lo suficiente, ¿qué recomendarías? Estoy bien con Emacs y GCC. Necesito educarme como administrador / usuario de Linux, y necesito aprender las herramientas adecuadas de solución de problemas (strace is cool, por cierto), equivalentes a las que mencioné anteriormente.

¿Necesito hacer Linux desde cero? ¿O necesito leer algunos libros (he leído "Entorno de programación UNIX" de Kernighan y "Programación avanzada ..." de Stevens, pero necesito aprender algo más práctico)? ¿O necesito tener alguna distribución de Linux en la computadora de mi casa?

rincewind
fuente
73
Me siento igual acerca de Windows
15
¿Consideró obtener otro trabajo con el que se sienta más cómodo?
3
En Unices manes tu amigo. Lo haría man nmy man ldcomo punto de partida.
dietbuddha
1
empezar a usar windows;)
Jigar Joshi
1
¿"Todo lo demás viene naturalmente"? Por supuesto, es algo natural, lo has estado haciendo durante 10 años. Linux no es peor, es diferente . Y ahora que eres 10 años mayor, tu cerebro no aprende cosas nuevas tan fácilmente como solía hacerlo, y todas esas cosas que son diferentes se convierten en algo que debes desaprender. Acercarse a todo esto con "Linux apesta" te hará la vida imposible.
JesperE

Respuestas:

62

Puede encontrar interesante el artículo Enlace dinámico en Linux y Windows que explica cómo cada sistema operativo realiza enlaces dinámicos. El artículo Rutas de búsqueda de biblioteca compartida explica cómo se encuentran las bibliotecas. También las bibliotecas de Linux estáticas, compartidas, dinámicas y cargables son muy buenas. Lo bueno de las bibliotecas de Linux es que tienen un mejor soporte para el control de versiones y tienen varias versiones de una biblioteca que Windows (AFAIK, no hago Windows). Para obtener más información , consulte Versiones de la interfaz de la biblioteca en Solaris y Linux . Estos artículos realmente deberían cubrirlo con bibliotecas.

El GDB es muy poderoso, una buena introducción es probablemente el Tutorial gdb de RMS . Es posible que desee leer sobre puntos de interrupción condicionales. Para __asm(int 3)ver los equivalentes, vea la pregunta Establecer punto de interrupción en código C o C ++ mediante programación para gdb en Linux .

El libro Advanced Unix Programming de Marc Rochkind es una lectura obligada, en mi humilde opinión. Tiene muchos ejemplos y cubre todos los temas de POSIX / SUS de una manera muy bien explicada. Es el mejor libro sobre este tema que he leído hasta ahora.

Pero para hacerte la vida más fácil, en realidad recomiendo usar una API de alto nivel que abstraiga cosas para ti, como Qt. También hace que la escritura multiplataforma sea mucho más fácil.

Hacer Linux From Scratch te ayuda a comprender cómo está compuesto un sistema Linux, pero creo que no mejora mucho tu conocimiento sobre él desde el punto de vista de los desarrolladores. Sin embargo, te hace sentir más cómodo con Linux, ya que aprendes qué partes hay en un entorno Linux (y en parte también por qué ). Un Linux no será una gran caja negra para ti después de trabajar con Linux From Scratch.

DarkDust
fuente
Claro, en el sistema de 32 bits esta interrupción irrumpirá en el depurador, si el proceso ya se está depurando . Eso es si te estoy preguntando. Windows permite adjuntar el depurador después de que ocurriera la trampa. En algunos escenarios, esto es extremadamente conveniente. Y gracias por los enlaces!
rincewind
66
¡Gran respuesta! Tenga en cuenta que, para el tutorial de gdb, RMS es "Ryan M. Schmidt" y no "Richard M. Stallman". (una nota importante ya que Stallman fue el autor original de GDB)
entropo
Windows tuvo soporte de carga de la biblioteca Side-by-Side ( msdn.microsoft.com/en-us/library/ms229072(v=vs.80).aspx ) durante aproximadamente 12 años. Entonces estás bastante equivocado con respecto al versionado.
Claus Jørgensen
16

Si lo desea strace, no lo olvide ltrace: el equivalente para las llamadas a la biblioteca.
Además, sí, recomiendo Linux From Scratch . Es un buen ejercicio para resolver los elementos centrales del sistema operativo y cómo encajan entre sí.
Para un tratamiento de referencia de programación del sistema moderno y completo, recomendaría elegir la interfaz de programación de Linux .

entropo
fuente
12

El Mac OS X es como un Mercedes; Es el más bonito y limpio, pero cuesta mucho. Windows es como un Toyota; te llevará de ida y vuelta.

Linux es como un hot rod; Es para que la gente profundice y desarme y vuelva a armar. Linux no es para alguien que solo quiere usar la computadora; Es para las personas que aman las computadoras. Las personas que no aman las computadoras deben mantenerse alejadas.

Lo que aprendiste en Windows no se traducirá muy bien, no. Pero puedes ver las partes internas y ver el motor en marcha.

Trate de tomar Linux como un juguete nuevo, con el que pueda jugar y gatear y ver qué está pasando. Las cosas que son fáciles en Windows son más difíciles en Linux; Las cosas que son imposibles en Windows son posibles en Linux.

Si amas las computadoras, puedes amar Linux; si no te gustan las computadoras, ¿por qué estás programando?

Andy Canfield
fuente
13
+1, para " Las cosas que son fáciles en Windows son más difíciles en Linux; las cosas que son imposibles en Windows son posibles en Linux ". Yo agregaría " Mientras que Windows empuja la comida pre-digerida en tu boca, con Linux tienes la posibilidad de cocinar y la recompensa es que puedes comer lo que quieras " ... Por supuesto, ya sea comestible o no. depende mucho de cuán buen chef seas ...
Alain Pannetier
14
@Andy: "Windows es como un Toyota" . Toyota tiene una calidad mucho mejor que Windows.
Vuelva a instalar a Mónica el
44
@ SK-logic, precisamente. Sin involucrarse en otra guerra religiosa, considere lo siguiente. Por meras razones estratégicas y financieras, MS se dirige a la mayor audiencia posible. Las cosas técnicas que los usuarios conscientes de la computadora desearían poder controlar están ocultas fuera de la vista para que los Jones no tengan problemas. Terminas con una burocracia en todas partes DEP, GPO, "Instalador de confianza", API privadas u ocultas, "arranque de reparación automática", etc. Los geeks no reparan Windows, simplemente optan por no participar. Linux no tiene el mismo objetivo hegemónico; Lo hacen los usuarios para los usuarios. Ese es todo el punto.
Alain Pannetier
3
@ SK-logic - "si tienes fuentes de Windows" ... :-)
Rory Alsop
3
"Mente nombrar un par de cosas que son" imposibles en Windows "y" posibles en Linux ". Encontré un error en una secuencia de comandos del sistema Linux y lo arreglé. Encontré errores en Windows pero nunca he podido solucionarlos. Supongamos que tengo una imagen ISO (CD) en un archivo de disco; puedo montar eso como una unidad en Linux; ¿puedes hacer eso en Windows? Y recuerda que casi todo en Linux es gratis, y casi todo en Windows requiere una costosa aplicación propietaria.
Andy Canfield
9

¿Qué tal si te desarrollas en Mono con Monodevelop? Esto lo ayudaría a comenzar fácilmente reutilizando su experiencia en .NET.

Johann Blais
fuente
Intenté esto recientemente, algunas diferencias con Visual Studio, por supuesto, pero estaba funcionando en una noche. Es una gran ruta de migración.
JBRWilkinson
8

Es desalentador cuando lo miras desde el principio (al igual que si fueras un desarrollador de Linux encargado de desarrollar Windows). Yo abordaría este problema a la vez.

  • Primero obtenga la configuración de su entorno (compilador, IDE, sí, existen, Netbeans / Eclipse, etc.)
  • A continuación, instale las API de nivel superior (boost / Qt, etc.)
  • Comience lentamente, si hay un problema inmediato que resolver, obtenga la compilación del código (o comience a escribir desde cero, etc.). interacción), y luego, cuando encuentras un problema, busca, estoy seguro de que alguien ha encontrado el mismo problema antes y lo ha resuelto.

Lo más importante, deje todas sus opiniones subjetivas en la puerta. Y no, no es necesario ser un gurú para desarrollar en Linux, sé lo suficiente para moverse, y no todo, pero me siento cómodo con eso ...

Nim
fuente
1
+1 Nim: StackExchange tiene una increíble cantidad de información previa aquí. Me siento más cómodo con los sabores de Unix, pero actualmente trabajo en el entorno de desarrollo de Windows y la búsqueda de SE ha respondido a casi todas mis consultas en muy poco tiempo.
Rory Alsop
6

The success or failure of many thing in life comes down to our attitude, looking for positives and keeping your mind focused on the positives will do more to adide you as you start down this new interesting adventure.

¿Cuánto tiempo le llevó dominar el trabajo en un entorno Windows? Se podría decir que fue fácil que recién comenzaste. Pero tuviste algunos años trabajando con Windows antes de eso. ¿Cuánto tiempo había estado usando Windows antes de escribir su primer programa? Fueron 8 años para mí, aunque he estado usando Linux casi exclusivamente durante 5 años. Ahora soy más competente en Linux que en Windows. Debe darse al menos tanto tiempo para familiarizarse con un nuevo sistema.

Comience con la lista de aplicaciones con las que no puede vivir en Windows y busque alternativas en el mundo * nix. http://alternativeto.net/ y las secciones de lectura adicional de Wikipedia pueden ser útiles aquí.

Aquí hay una lista de software alternativo que podría resultar muy útil. Aquí hay algunas alternativas a las cosas que mencionaste.

Otros recursos útiles para pasar de un sistema a otro

Para convertirse en un mejor usuario avanzado o usuario administrador, eche un vistazo a estos recursos

También parece que ha pasado un tiempo desde que has mirado el mundo * nix. Recomendaría algunas de las nuevas versiones de distribución de fedora , suse , debian o mi estación de trabajo preferida Ubuntu .

Probablemente ahora pueda salirse con la suya sin conocer los aspectos internos del sistema y solo los conceptos básicos como en Windows. No solo trataría de escaparme con el mínimo. Si ve a Linux como una herramienta que realmente lo ayuda en su desarrollo y no merly un sistema operativo en el que desarrolla, sería útil.

Linux From Scratch será mucho más importante si está desarrollando específicamente para Linux es un sentido muy específico y técnico. IE que desea desarrollar para el núcleo, o el puerto que programa en una supercomputadora con Linux. Sería muy útil, sin embargo. Creo que probablemente podrías dejar eso durante unos meses mientras intentas ponerte en marcha en Ubuntu. Ubuntu estará tan cerca de las cosas como funciona el mundo de Mac y Windows.

revs nelaaro
fuente
1
Debian no es exactamente una nueva distribución. :-P Sin embargo, sigue siendo una buena opción.
Steve S
Tampoco SuSE y Fedora ... SuSE tiene 15 años ahora, Fedora es una de las distribuciones "más jóvenes" que tiene 8 años. Aún así, +1.
DarkDust
1
@Darkdust @ Steve-s nuevo como en los últimos lanzamientos,
nelaaro
6

Creo que respondiste tu pregunta en la pregunta:

"En Windows, puede salirse con solo conocer un lenguaje de programación, una API contra la que está codificando, su IDE (VisualStudio) y algunas herramientas muy básicas para la resolución de problemas (depende, ProcessExplorer, DebugView, WinDbg). Todo lo demás es algo natural. "

Adivina qué, en Linux puedes salirte con solo conocer un lenguaje de programación, una API (o un par), tu IDE (Eclipse o NetBeans, incluso Geany, Emacs o vim, si lo deseas) y algunas herramientas básicas para la resolución de problemas ( gdb, herramientas de rastreo, pelusa, htop, ps).

Tienes mucho conocimiento invertido en el ecosistema de programación de Windows. Gran parte de eso es (con suerte) conocimiento abstracto (¿qué es un compilador, un depurador, una biblioteca compartida, un proceso, un hilo? ¿Qué hacen?) Que se traducirá fácilmente, una vez que se ponga al día con las diferentes herramientas. Algunos son específicos del dominio (¿Qué DLL está vinculado cuando agrego X a un proyecto?), Pero incluso pasar de una clase de lenguaje a otra dentro de Windows requeriría un nuevo aprendizaje.

Instale Ubuntu o Fedora en una máquina virtual, lea algunos tutoriales de C ++ Hello World en Eclipse o NetBeans, y algunas depuraciones en los tutoriales de Eclipse / NetBeans, y deje que la capacidad natural de adaptación de su cerebro se haga cargo. Traducirá ideas para usted si se relaja y simplemente lo pone a trabajar.

Justin
fuente
3

Aprendí Unix en general leyendo las páginas de manual. Al menos deberías echarles un vistazo. Sí, me refiero a todos ellos. El método lo uso para cd en los directorios de la página man, y atacarlos una sección a la vez.

Yo uso esto:

for i in *; do f=`basename $i .gz`; man `basename $f .1` ; done

... reemplazando el .1 con el número de la sección que está leyendo, .2, .3, etc. Presione ctrl-Z ctrl-C para salir del ciclo. Su kilometraje puede variar si su distribución de Linux almacena cosas de manera diferente, es decir, no como cmdname.1.gz.

Solo revisa las descripciones y más si es algo interesante. Las secciones 1, 2 y 3 son las más importantes para un programador. 1 cubre los comandos generales del usuario, que incluyen sus herramientas de compilación y varias utilidades forenses. 2 son llamadas al sistema y 3 son llamadas a la biblioteca.

Hack Saw
fuente
2
Sugeriría iniciar xmancomo una interfaz más "amigable". Seleccione una sección, haga clic en la página de manual, léala. Enjuague, repita.
ΤΖΩΤΖΙΟΥ
Me había olvidado de esas cosas. El estado de la documentación en el sistema operativo libre es menos que ideal, y descubrí que las herramientas a menudo empeoraron, así que dejé de usarlas. ¿Solo puedo suponer que han mejorado un poco?
Hack Saw
3

No te obligues a hacer algo que no te gusta. Use Windows como su entorno de desarrollo, escriba un código portátil, compílelo para Linux y solo pruébelo ocasionalmente en una máquina virtual.

SK-logic
fuente
2

No estoy seguro de que funcione para plataformas, pero para los lenguajes de programación, me ha resultado útil pensar en cómo me familiaricé y me sentí cómodo con los que soy bueno e intenté reproducir esas experiencias y actividades para lo que yo '' Estoy tratando de aprender.

Tal vez algo en esas líneas?

En términos generales, sin embargo, mi interés y confianza con GNU / Linux ha resultado ser mucho más manipulable (y requiere ajustes en los primeros días) que Windows. Necesitaba meterme con muchas cosas para que las cosas funcionaran y eso me ayudó a aprender muchas cosas. Las cosas están mucho mejor ahora, pero todas esas horas ayudaron.

Noufal Ibrahim
fuente
2

Fui uno de los dos encargados de algo similar, pero diferente. Trabajo en un distrito escolar K-12, y el sistema de negocios (recursos humanos, finanzas, etc.) está migrando de una base de datos HP3000 / TurboImage a una plataforma Linux / MS SQL. Me siento cómodo con el lado de MS SQL. Pero no del lado de Linux. Los dos estamos del lado del administrador, no del lado de la programación. La programación se realiza fuera: aplicación comercial de terceros para organizaciones K-12.

Tomé una clase de introducción de 5 fin de semana a Linux (Redhat) los fines de semana, se realizó principalmente en modo de línea de comandos, y valió la pena el tiempo como un inicio rápido en la forma de hacer las cosas en Linux. Obviamente YMMV dependiendo de la clase / maestro.

Usted mencionó 'Lo peor de todo: ¿cómo aprovisionar el entorno de desarrollo de Linux?' Como ya está muy familiarizado con Windows, le sugiero que obtenga una copia de vmWare Workstation. Con eso, puede mantener Windows como su estación de trabajo e instalar Linux como sistemas invitados: elimine, enjuague y repita según sea necesario. Cuando obtienes una buena configuración, creo que puedes tomar una instantánea, pero no puedo decir con certeza qué versiones son capaces del aspecto de la instantánea. Y si va en la ruta de vmWare Workstation para habilitar múltiples configuraciones de desarrollo, aumente la memoria, definitivamente.

Tampoco me importa recomendar el uso de CentOS como sistema operativo Linux para los invitados. Por lo que entiendo, es como RedHat sin la marca y / o el argumento de venta y / o los costos de soporte. No estoy familiarizado con los otros sabores de Linux, por lo que no puedo dar información sobre ellos.

Greg

Gregory Thomson
fuente
1

Me gustan ambas plataformas y, a pesar de todas las diferencias en la interfaz de usuario y el ecosistema de desarrollo, las encuentro más parecidas que diferentes. De hecho, para la mayoría de los conceptos de Windows, puede encontrar otros equivalentes de Linux simplemente buscando en Internet.

Dicho esto, sugiero encarecidamente aprender a hacer las cosas al "estilo Unix". Use la línea de comandos en lugar de los front-end de la GUI con errores (estoy hablando principalmente de gdb aquí); no busque un IDE y aprenda a utilizar un conjunto de herramientas especializadas. Elige un buen editor (apuntando a vim) y aprende bien. Lea cómo makefunciona incluso si no planea convertirse en un experto. Tal vez incluso te guste Linux. Es geek-friendly y divertido para jugar.

Nemanja Trifunovic
fuente
1

Considere esto: una vez no sabía nada sobre Windows, pero lo aprendió y con el tiempo se sintió cómodo con él.

Luego, MS cambió el sistema de programación con el que se sentía cómodo a .NET y ya no sabía nada sobre DLLS, COM y lo que fuera, tenía que aprender cosas como ensamblados, GAC, dominios de aplicaciones. Los aprendiste bien.

Entonces, ¿por qué te preocupa hacer lo mismo con Linux?

Hay montones de tutoriales de "introducción" en la web para todo tipo de entornos de programación. Ahora dices GCC, así que voy a asumir el desarrollo de C ++. Obtenga Eclipse, instale el CDT (herramientas de desarrollo c) en la parte superior de su plataforma Eclipse (Eclipse es un IDE multipropósito, puede usarlo para C ++, PHP, Java, lo que sea, pero necesita instalar las herramientas para su idioma ya que realmente no querrás que todo esté preinstalado como VS y que tarde 3 días en instalarse :))

Hay tutoriales fáciles de usar en toda la web. IBM tiene uno aquí que es bastante completo.

Herramientas de depuración ... eclipse lo tiene incrustado ( tutorial ), pero puede encontrar muchas herramientas como las que mencionó, solo busque en la web y encontrará muchas opciones. Le tomará un poco de tiempo descubrir cómo leer un volcado de memoria (a diferencia de una descarga de usuario de Windows, por ejemplo), pero llegará allí.

También puede valer la pena comenzar un blog con sus experiencias, no solo le permitirá recordar lo que ha hecho (por ejemplo, configurar eclipse como le guste, se olvidará cuando necesite volver a hacerlo en un tiempo del año) pero ayudará a otros en su situación.

gbjbaanb
fuente
0

No creo que necesites hacer Linux desde cero. Si yo fuera tú, iría por Ubuntu. Es más cómodo y, al estar basado en Debian, hay mucho material técnico disponible.

Si quieres sumergirte de cabeza en Linux, Gentoo es una buena opción. Requiere que lea bastante sobre la configuración y los núcleos, pero también le brinda un sistema bastante funcional para trabajar en una

anders.norgaard
fuente
0

Busca en Google "El arte de la programación de Unix" y léelo. En mi opinión, su principal dificultad es la filosofía diferente, y ese libro es una excelente lectura para esto.

También le presenta algunas diferencias no obvias pero técnicamente muy importantes entre los sistemas * n * x y Windows, que son clave para comprender por qué hacer las cosas de otra manera tiene sentido en Linux.

usuario59625
fuente
1
... y también te presenta muchas herramientas y técnicas para usar en Linux.
0

La primera pregunta que haría es qué es lo que quieres desarrollar. Si se trata de una aplicación basada en GUI, puede ser diferente de tener que escribir algo como una extensión del núcleo.

En el caso de una aplicación gui, creo que el método más fácil es usar Qt, que tiene su propio entorno de desarrollo (Qt-Creator) y ser multiplataforma, le permite aprender solo una API que se puede usar para Windows / Linux / OSX e incluso desarrollo móvil. Al igual que Visual Studio en Windows, o XCode en OSX, puede crear y diseñar ventanas y elementos desde un editor gráfico y la API es muy fácil de aprender con un montón de aplicaciones de muestra.

Si necesita obtener un nivel más bajo, una vez que conozca Linux en la línea de comandos, sepa cómo atravesar directorios, manipular archivos, comprender permisos, etc., o bien comience a leer cómo compilar un programa simple con gcc, cómo vincular archivos y ejecutar el ejecutable y luego cómo depurar con gdb.

Alternativamente, si eso parece un poco desalentador, puede descargar Eclipse u otro IDE, pero probablemente se sentirá mucho más cómodo con Linux a largo plazo, si primero pone el tiempo y el esfuerzo en la línea de comando.

El caballero oscuro
fuente