passer de Windows à Linux [fermé]


57

Je dois réconcilier ces 2 faits:

  1. Je ne me sens pas à l'aise pour travailler sur Linux;
  2. J'ai besoin de développer un logiciel pour Linux.

Quelques antécédents: J’ai plus de 10 ans d’expérience en programmation sous Windows (presque exclusivement en C / C ++, mais aussi en .NET), j’utilisais FreeBSD depuis environ 3 ans à la maison (il fallait ensuite revenir à la version précédente). Windows), et je n’ai jamais eu beaucoup de chance avec Linux. Et maintenant, je dois développer un logiciel pour Linux. J'ai besoin d'un plan.

Sous Windows, vous pouvez vous contenter de connaître un langage de programmation, une API avec laquelle vous codez, votre IDE (VisualStudio) et des outils de base pour le dépannage (Depends, ProcessExplorer, DebugView, WinDbg). Tout le reste vient naturellement.

Sur Linux, c'est une histoire très différente. Comment diable pourrais-je savoir quelle DLL (désolé, Shared Object) se chargerait si je la reliais à partir du plugin Firefox? Quel est l'équivalent Linux d'insérer __asm ​​int 3 / DebugBreak () dans le source et d'exécuter le programme, puis de laisser le système d'exploitation appeler un débogueur? Pourquoi les builds de version infernale utilisent-ils quelque chose, appelé appLoader, alors que les builds de débogage fonctionnent d'une manière ou d'une autre? Le pire de tout: comment provisionner l'environnement de développement Linux?

Donc, compte tenu du fait que la haine est généralement associée à un manque de connaissances, que recommanderiez-vous? Je suis d'accord avec Emacs et GCC. Je dois me former en tant qu'administrateur / utilisateur de Linux et apprendre les outils de dépannage appropriés (strace is cool, d'ailleurs), équivalents à ceux que j'ai mentionnés ci-dessus.

Dois-je faire Linux à partir de zéro? Ou dois-je simplement lire quelques livres (j'ai lu "Environnement de programmation UNIX" de Kernighan et "Programmation avancée ..." de Stevens, mais j'ai besoin d'apprendre quelque chose de plus pratique)? Ou ai-je besoin d'une distribution Linux sur mon ordinateur personnel?


73
Je me sens pareil à propos de Windows

15
Considéré obtenir un autre travail que vous êtes plus à l'aise?

3
Sur Unices manest votre ami. Je voudrais man nmet man ldcomme point de départ.
dietbuddha

1
commencer à utiliser les fenêtres;)
Jigar Joshi

1
"Tout le reste vient naturellement"? Bien sûr que cela vient naturellement, vous le faites depuis 10 ans. Linux n'est pas pire, c'est différent . Et maintenant que vous avez 10 ans de plus, votre cerveau n’apprend plus les choses nouvelles aussi facilement qu’avant, et toutes ces choses qui sont différentes deviennent des choses que vous devez désapprendre. Aborder tout ça avec "Linux sucks" va vous rendre la vie misérable.
JesperE

Réponses:


62

Vous trouverez peut-être intéressant l'article sur les liens dynamiques dans Linux et Windows , qui explique comment chaque système d'exploitation crée des liens dynamiques. L'article Chemins de recherche de bibliothèques partagées explique comment les bibliothèques sont trouvées. Les bibliothèques Linux statiques, partagées dynamiques et chargeables sont également très bonnes. Une bonne chose à propos des bibliothèques Linux est qu’elles prennent mieux en charge le contrôle de version et qu’il existe plusieurs versions d’une bibliothèque par rapport à Windows (autant que je sache, je ne fais pas Windows). Reportez-vous à la rubrique Versionnage de l'interface de bibliothèque dans Solaris et Linux pour plus d'informations. Ces articles devraient vraiment vous couvrir avec des bibliothèques.

La GDB est très puissante. Une bonne introduction est probablement le didacticiel gdb de RMS . Vous voudrez peut-être lire sur les points d'arrêt conditionnels. Pour que les équivalents __asm(int 3)voient la question Définir un point d'arrêt dans le code C ou C ++ par programme pour gdb sous Linux .

Le livre Advanced Unix Programming de Marc Rochkind est un must-read, IMHO. A beaucoup d'exemples et couvre tous les sujets POSIX / SUS d'une manière très bien expliquée. C'est le meilleur livre sur ce sujet que j'ai lu jusqu'à présent.

Mais pour vous simplifier la vie, je recommande en fait d’utiliser une API de haut niveau qui résume des éléments pour vous, comme Qt. Il est également beaucoup plus facile d’écrire sur plusieurs plates-formes.

Faire Linux From Scratch vous aide à comprendre comment un système Linux est composé, mais je pense que cela n’améliorera pas beaucoup vos connaissances à ce sujet du point de vue des développeurs. Cela vous rend cependant plus à l'aise avec Linux, car vous apprendrez quelles sont les parties présentes dans un environnement Linux (et en partie aussi pourquoi ). Un Linux ne sera plus une grosse boîte noire après avoir travaillé avec Linux From Scratch.


Bien sûr, sur le système 32 bits, cette interruption entrera dans le débogueur, si le processus est déjà en cours de débogage . Voilà ce que je demande. Windows permet d'attacher le débogueur après que l'interruption s'est produite. Dans certains scénarios, cela est extrêmement pratique. Et merci pour les liens!
Rincevent

6
Très bonne réponse! Notez que pour le didacticiel GDB, RMS est "Ryan M. Schmidt" et non "Richard M. Stallman". (une note importante puisque Stallman était l'auteur original de GDB)
entropo le

Le chargement de la bibliothèque côte à côte sous Windows ( msdn.microsoft.com/en-us/library/ms229072(v=80s.aspx ) était pris en charge depuis environ 12 ans maintenant. Vous vous trompez donc assez en ce qui concerne la gestion des versions.
Claus Jørgensen

16

Si vous aimez strace, n'oubliez pas ltrace: l'équivalent pour les appels de bibliothèque.
En outre, oui, je recommande Linux From Scratch . C'est un bon exercice pour définir les éléments centraux du système d'exploitation et leur intégration.
Pour un traitement de référence de programmation système complet et moderne, je vous recommande de choisir l' interface de programmation Linux .


12

Le Mac OS X est comme une Mercedes. c'est la plus jolie et la plus propre, mais ça coûte cher. Windows est comme une Toyota. ça va vous amener là-bas et revenir.

Linux est comme un hot rod; C’est aux gens de creuser, de démonter et de remonter. Linux n'est pas pour quelqu'un qui veut juste utiliser l'ordinateur; c'est pour les gens qui aiment les ordinateurs. Les gens qui n'aiment pas les ordinateurs devraient rester à l'écart.

Les éléments que vous avez appris sous Windows ne se traduiront pas très bien, non. Mais vous pouvez voir les internes et regarder le moteur tourner.

Essayez de prendre Linux comme un nouveau jouet, avec lequel vous pouvez jouer, explorer et voir ce qui se passe. Les choses faciles sous Windows sont plus difficiles sous Linux; les choses impossibles sous Windows sont possibles sous Linux.

Si vous aimez les ordinateurs, vous pouvez aimer Linux; Si vous n'aimez pas les ordinateurs, pourquoi programmez-vous?


13
+1, car " Les choses simples dans Windows sont plus difficiles sous Linux; les choses impossibles sous Windows sont possibles sous Linux ". J'ajouterais: " Alors que Windows met les aliments pré-digérés dans votre bouche, avec Linux, vous avez la possibilité de cuisiner et vous êtes récompensé de ce que vous mangez ce que vous aimez " ... Bien sûr, qu'il soit comestible ou non ça dépend beaucoup de ton bon chef ...
Alain Pannetier

14
@Andy: "Windows est comme une Toyota" . Toyota a une bien meilleure qualité que Windows.
Rétablir Monica

4
@ SK-logic, Justement. Sans s'engager dans une autre guerre religieuse, veuillez considérer les points suivants. Pour de simples raisons stratégiques et financières, les États membres ciblent le plus vaste public possible. Les éléments techniques que les utilisateurs avertis aimeraient pouvoir contrôler sont dissimulés à l'abri des regards, de sorte que les Jones ne rencontrent pas de problèmes. Vous vous retrouvez avec des tracasseries administratives partout où DEP, GPO, "Installateur de confiance", API privées ou cachées, "Démarrage auto-réparation", etc. Les geeks ne réparent pas Windows, ils ne font que désactiver. Linux n'a pas le même objectif hégémonique; c'est fait par les utilisateurs pour les utilisateurs. Exactement.
Alain Pannetier

3
@ SK-logic - "si vous avez des sources Windows" ... :-)
Rory Alsop

3
"Nommer deux choses qui sont" impossibles sous Windows "et" possibles sous Linux "- J'ai trouvé un bogue dans un script système Linux et je l'ai corrigé. J'ai trouvé des bogues dans Windows mais je n'ai jamais réussi à les corriger. Supposons que vous avoir une image ISO (CD) dans un fichier disque, je peux la monter comme lecteur sous Linux, pouvez-vous le faire sous Windows? Et rappelez-vous que presque tout sous Linux est gratuit et que presque tout dans Windows nécessite une application propriétaire coûteuse.
Andy Canfield

9

Que diriez-vous de développer Mono avec Monodevelop? Cela vous permettrait de démarrer assez facilement en réutilisant votre expérience dans .NET.


J'ai récemment essayé ceci - quelques différences par rapport à Visual Studio, bien sûr, mais j'étais opérationnel le soir même. C'est un excellent chemin de migration.
JBRWilkinson

8

C'est un défi de taille dès le départ (comme si vous étiez un développeur Linux chargé de développer Windows). Je voudrais aborder ce problème à la fois.

  • D'abord, obtenez la configuration de votre environnement (compilateur, IDE - oui, Netbeans / Eclipse, etc.)
  • Ensuite, installez les apis de niveau supérieur (boost / Qt, etc.)
  • Commencez lentement, s'il y a un problème immédiat à résoudre, faites compiler le code (ou commencez à écrire à partir de rien, etc.). Comme pour tout projet de développement, commencez par travailler avec les éléments que vous connaissez (c'est-à-dire des choses qui ne nécessitent pas de système d'exploitation spécifique. interaction), et ensuite, lorsque vous rencontrez un problème, je suis sûr que quelqu'un a déjà rencontré le même problème et l'a résolu ..

Surtout, laissez tous vos avis subjectifs à la porte. Et non, vous n'avez pas besoin d'être un gourou pour développer sous Linux, je sais assez pour me déplacer, et pas tout - mais je suis à l'aise avec ça ...


1
+1 Nim: StackExchange a une quantité impressionnante d'informations préalables ici. Je suis plus à l'aise avec les variantes d'Unix, mais je travaille actuellement dans un environnement de développement Windows et la recherche SE a répondu à presque toutes mes questions en très peu de temps.
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.

Combien de temps avez-vous mis à maîtriser le travail dans un environnement Windows? Vous pourriez dire que c'était facile, vous venez de commencer. Mais vous avez travaillé quelques années avec Windows auparavant. Depuis combien de temps utilisez-vous Windows avant d’écrire votre premier programme? Cela faisait 8 ans pour moi, bien que j'utilise maintenant Linux presque exclusivement depuis 5 ans. Je maîtrise maintenant mieux Linux que Windows. Vous devriez vous donner au moins autant de temps pour vous familiariser avec un nouveau système.

Commencez par la liste des applications que vous ne pouvez pas utiliser dans Windows et recherchez des alternatives dans le monde * nix. http://alternativeto.net/ et les sections de lectures supplémentaires de Wikipedia peuvent être utiles ici.

Voici une liste de logiciels alternatifs qui pourraient s'avérer très utiles. Voici quelques alternatives aux choses que vous avez mentionnées.

Autres ressources utiles pour passer d'un système à un autre

Pour devenir un meilleur utilisateur expérimenté ou un utilisateur admin, jetez un coup d'œil à ces ressources

On dirait également que cela fait longtemps que vous n’avez pas regardé le monde * nix. Je recommanderais certaines des nouvelles distributions de fedora , suse , debian ou de mon poste de travail préféré Ubuntu .

Vous pouvez maintenant probablement vous en sortir sans connaître les éléments internes du système et seulement les bases, comme dans Windows. Je ne voudrais pas simplement essayer de sortir avec le minimum. Si vous considérez Linux comme un outil qui vous assiste réellement dans votre développement et non comme un système d’exploitation dans lequel vous développez, il serait utile.

Linux From Scratch sera beaucoup plus important si vous développez spécifiquement pour Linux est un sens très spécifique et technique. Par exemple, vous souhaitez développer le noyau ou transférer votre programme sur un super-ordinateur fonctionnant sous Linux. Ce serait très utile quand même. Je pense que vous pourriez probablement laisser cela quelques mois pendant que vous essayez simplement de vous lancer dans Ubuntu. Ubuntu sera aussi proche des choses que le travail monde de Mac et Windows.


1
Debian n'est pas vraiment une nouvelle distribution. :-P C'est quand même un bon choix.
Steve S

SuSE et Fedora non plus ... SuSE a 15 ans maintenant, Fedora est en effet l’une des distributions "plus jeunes" ayant 8 ans. Toujours, +1.
DarkDust

1
@Darkdust @ Steve-s nouveau comme dans les dernières versions,
nelaaro

6

Je pense que vous avez répondu à votre question dans la question:

"Sous Windows, vous pouvez vous contenter de connaître un langage de programmation, une API avec laquelle vous codez, votre IDE (VisualStudio) et des outils de base pour le dépannage (Depends, ProcessExplorer, DebugView, WinDbg). Tout le reste est naturel. "

Gues quoi, sous Linux, vous pouvez vous contenter de connaître un langage de programmation, une API (ou un couple), votre IDE (Eclipse ou NetBeans, voire Geany, Emacs ou vim, si vous préférez) et quelques outils de base pour le dépannage ( gdb, outils de traçage, charpie, htop, ps).

Vous avez beaucoup de connaissances investies dans l'écosystème de programmation Windows. La plupart de ces connaissances sont (espérons-le) abstraites (qu'est-ce qu'un compilateur, un débogueur, une bibliothèque partagée, un processus, un fil de discussion? Que font-elles?) Qui se traduiront facilement, une fois que vous maîtriserez les différents outils. Certaines sont spécifiques à un domaine (quelle DLL est liée lorsque j'ajoute X à un projet?), Mais même passer d'une classe de langue à une autre dans Windows nécessiterait un nouvel apprentissage.

Installez Ubuntu ou Fedora dans une machine virtuelle, lisez des didacticiels C ++ Hello World dans Eclipse ou NetBeans et des procédures de débogage dans des didacticiels Eclipse / NetBeans, et laissez la capacité naturelle de votre cerveau à s'adapter prendre le dessus. Si vous vous détendez et que vous le mettez au travail, il traduira vos idées.


3

J'ai appris Unix en général en lisant les pages de manuel. Vous devriez au moins les écrémer. Oui, je veux dire tous. La méthode que je l’utilise pour entrer dans les répertoires des pages de manuel et les attaquer section par section.

J'utilise ceci:

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

... en remplaçant le .1 par le numéro de la section que vous lisez, .2, .3, etc. Appuyez sur ctrl-Z ctrl-C pour sortir de la boucle. Votre kilométrage peut varier si votre distribution linux enregistre les choses différemment, c.-à-d. Pas sous le nom nom_commande.1.gz.

Passez simplement par les descriptions, et plus si c'est quelque chose d'intéressant. Les sections 1, 2 et 3 sont les plus importantes pour un programmeur. 1 couvre les commandes utilisateur générales, y compris vos outils de compilation, et divers utilitaires d’investigation. 2 correspond aux appels système et 3 aux appels à la bibliothèque.


2
Je suggérerais de se lancer xmancomme une interface plus «conviviale». Sélectionnez une section, cliquez sur la page de manuel, lisez-la. Rincez, répétez.
ΩΤΖΙΟΥ

J'avais oublié de telles choses. L’état de la documentation sur le système d’exploitation libre n’est pas idéal, et j’ai trouvé que les outils aggravaient souvent la situation, j’ai donc cessé de les utiliser. Je peux seulement supposer qu'ils se sont un peu améliorés?
Hack Saw

3

Ne vous forcez pas à faire quelque chose que vous n'aimez pas. Utilisez Windows comme environnement de développement, écrivez un code portable, compilez-le pour Linux et ne le testez que de temps en temps sur une machine virtuelle.


2

Je ne suis pas sûr que cela fonctionne pour les plates-formes, mais pour les langages de programmation, j'ai trouvé utile de réfléchir à la façon dont je me suis familiarisé et que je suis à l'aise avec ceux pour lesquels je suis bon et d'essayer de rejouer ces expériences et activités pour ce que j'ai '. J'essaie d'apprendre.

Peut-être quelque chose sur ces lignes?

De manière générale cependant, mon intérêt et ma confiance pour GNU / Linux sont apparus comme étant beaucoup plus faciles à bricoler (et nécessitant des bricolages dans les premiers jours) que Windows. J'avais besoin de bricoler beaucoup de choses pour que ça fonctionne et cela m'a aidé à apprendre beaucoup de choses. Les choses vont beaucoup mieux maintenant, mais toutes ces heures m'ont aidé.


2

J'étais l'un des deux chargés de quelque chose de similaire, mais différent. Je travaille dans un district scolaire de la maternelle à la 12e année et le système commercial (ressources humaines, finances, etc.) est en train de migrer d'une base de données HP3000 / TurboImage vers une plate-forme Linux / MS SQL. Je suis à l'aise avec le côté MS SQL. Mais pas le côté Linux. Nous sommes tous les deux du côté de l’administrateur, pas du côté de la programmation. La programmation est faite à l'extérieur - Application d'entreprise tierce pour les organisations de la maternelle à la 12e année.

J'ai suivi un cours d'introduction à Linux (Redhat) de 5 week-ends, principalement en mode ligne de commande, et cela en valait la peine, car je pouvais me lancer rapidement dans la façon de faire de Linux. Évidemment YMMV selon la classe / l'enseignant.

Vous avez mentionné «Le pire de tout: comment provisionner un environnement de développement Linux? Puisque vous connaissez déjà très bien Windows, je vous suggère fortement de vous procurer une copie de vmWare Workstation. Avec cela, vous pouvez garder Windows comme station de travail et installer Linux comme système invité - supprimez, rincez et répétez autant de fois que nécessaire. Lorsque vous avez une bonne configuration, je pense que vous pouvez la prendre en instantané, mais je ne peux pas dire avec certitude quelles versions sont capables de l’aspect prise d’instantané. Et si vous utilisez la route vmWare Workstation pour activer plusieurs configurations de développement, augmentez définitivement la mémoire.

Cela ne me dérange pas non plus de recommander l'utilisation de CentOS comme système d'exploitation Linux pour les invités. D'après ce que j'ai compris, c'est comme RedHat sans la stratégie de marque et / ou l'argumentaire de vente et / ou les coûts de support. Je ne connais pas bien les autres versions de Linux, je ne peux donc pas y contribuer.

Greg


1

J'aime les deux plates-formes et pour toutes les différences dans l'interface utilisateur et dans l'éco-système dev, je les trouve plus similaires que différentes. En fait, pour la plupart des concepts Windows, vous pouvez en trouver un équivalent à Linux simplement en effectuant une recherche sur Internet.

Ceci dit, je suggère fortement d’apprendre à faire les choses de la "manière Unix". Utilisez la ligne de commande plutôt que des interfaces graphiques boguées (je parle principalement de gdb ici); ne cherchez pas d'IDE et apprenez plutôt à utiliser un ensemble d'outils spécialisés. Choisissez un bon éditeur (montrant vim) et apprenez-le bien. Lisez comment makefonctionne même si vous ne prévoyez pas de devenir un expert. Peut-être que vous aimerez même Linux. C'est un geek convivial et amusant à jouer.


1

Considérez ceci: vous ne saviez autrefois rien de Windows, mais vous l’avez appris et, avec le temps, vous en êtes habitué.

Ensuite, MS a changé le système de programmation avec lequel vous étiez habitué. NET et vous ne connaissiez plus rien des DLLS, COM, et peu importe, vous deviez apprendre des choses comme des assemblys, des GAC et des domaines d'application. Vous avez appris ces ok.

Alors, pourquoi vous inquiétez-vous maintenant de faire la même chose avec Linux?

Il existe de nombreux didacticiels sur le Web pour commencer à utiliser tous les environnements de programmation. Maintenant, vous dites GCC, je vais donc assumer le développement C ++. Procurez-vous Eclipse, installez CDT (c dev tools) au-dessus de votre plate-forme Eclipse (Eclipse est un IDE polyvalent, vous pouvez l'utiliser pour C ++, PHP, Java, peu importe, mais vous devez installer les outils pour votre langue. comme vous ne voudriez pas vraiment tout pré-installé comme VS et prendre 3 jours pour l’installer :))

Il existe des didacticiels faciles à utiliser sur le Web. IBM en a un ici assez complet.

Outils de débogage ... eclipse est intégré ( tutoriel ), mais vous pouvez trouver de nombreux outils comme ceux que vous avez mentionnés, il suffit de rechercher sur le Web et vous trouverez de nombreuses options. Il vous faudra un peu de temps pour comprendre comment lire un dump principal (par opposition à un userdump Windows par exemple), mais vous y arriverez.

Il pourrait également être intéressant de créer un blog avec vos expériences. Cela vous permettra non seulement de vous rappeler ce que vous avez fait (par exemple, en configurant éclipse à votre guise, vous oublierez que vous devez le refaire dans un environnement différent. année), mais cela aidera les autres dans votre situation.


0

Je ne pense pas que vous deviez faire Linux à partir de Scratch. Si j'étais vous, je choisirais Ubuntu. C’est plus confortable, et étant basé sur debian, il ya beaucoup de matériel technique disponible.

Si vous voulez vous plonger plus avant dans Linux, Gentoo est une bonne option. Il vous faut beaucoup lire sur la configuration et les noyaux, mais cela vous donne également un système assez fonctionnel pour travailler en af


0

Google "L'art de la programmation Unix" et lisez-le. OMI, votre principale difficulté est la philosophie différente, et ce livre est une excellente lecture pour cela.

Il vous présente également certaines différences non évidentes mais très importantes d'un point de vue technique entre les systèmes * n * x et Windows - elles sont essentielles pour comprendre pourquoi il est logique d'utiliser des méthodes différentes sous Linux.


1
... et vous présente également de nombreux outils et techniques à utiliser sous Linux.

0

La première question que je poserais est qu'est-ce que vous voulez développer? S'il s'agit d'une application basée sur une interface graphique, cela peut être différent de devoir écrire quelque chose comme une extension de noyau.

Dans le cas d'une application graphique, la méthode la plus simple consiste à utiliser Qt, qui possède son propre environnement de développement (Qt-Creator). De plus, étant multi-plateforme, vous ne pouvez apprendre qu'une seule API utilisable pour Windows / Linux. / OSX et même le développement mobile. Comme Visual Studio sous Windows ou XCode sous OSX, vous pouvez créer et mettre en forme des fenêtres et des éléments à partir d'un éditeur graphique. L'API est très facile à utiliser avec de nombreux exemples d'applications.

Si vous avez besoin de passer à un niveau inférieur, une fois que vous maîtriserez linux en ligne de commande, sachez comment parcourir les répertoires, manipuler les fichiers, comprendre les autorisations, etc., puis commencez à lire comment compiler un programme simple avec gcc, comment lier des fichiers et exécuter l'exécutable, puis comment déboguer avec gdb.

Alternativement, si cela semble un peu intimidant, vous pouvez télécharger Eclipse ou un autre IDE, mais vous deviendrez probablement beaucoup plus à l'aise avec Linux à long terme, si vous mettez d'abord du temps et des efforts dans la ligne de commande.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.