1. I don't feel comfortable working on Linux;2. I need to develop software for Linux.

Some background: I have 10+ years of programming experience on Windows (almost exclusively C/C++, but some .NET as well), I was a user of FreeBSD at home for about 3 years or so (then had to go back to Windows), and I've never had much luck with Linux. And now I have to develop software for Linux. I need a plan.

On Windows, you can get away with just knowing a programming language, an API you're coding against, your IDE (VisualStudio) and some very basic tools for troubleshooting (Depends, ProcessExplorer, DebugView, WinDbg). Everything else comes naturally.

On Linux, it's a very different story. How the hell would I know what DLL (sorry, Shared Object) would load, if I link to it from Firefox plugin? What's the Linux equivalent of inserting __asm int 3/DebugBreak() in the source and running the program, and then letting the OS call a debugger? Why do release builds use something, called appLoader, while debug builds work somehow different? Worst of all: How to provision Linux development environment?

So, taking into account that my hatred might be associated with not knowing enough, what would you recommend? I'm ok with Emacs and GCC. I need to educate myself as a Linux admin/user, and I need to learn proper troubleshooting tools (strace is cool, btw), equivalents to the ones I mentioned above.

The book Advanced Unix Programming by Marc Rochkind is a must-read, IMHO. It offers lots of examples and covers all POSIX/SUS topics in a very well-explained way. It's the best book about this topic I've read so far.

But to make your life easier I actually recommend you use a highlevel API that abstracts stuff for you, like Qt. It will also make writing cross-platform a lot easier.

Doing Linux From Scratch helps you get an understanding of how a Linux system is composed, but I think it doesn't much improve your knowledge about it from a developer's point of view. It does, however, make you more comfortable with Linux, as you learn what parts are there in a Linux environment (and also why). A Linux won't be a big blackbox to you after working through Linux From Scratch.

3) Start slowly. If there is an immediate problem to solve, get the code compiling (or start writing from scratch). Like you would tackle any development project, get the stuff you know working first (i.e. things that don't need OS specific interaction), and then when you hit a snag—search. I'm sure someone out there has come across the same problem before and resolved it.

Most importantly, leave all your preconceived notions at the door. And no, you don't need to be a guru to develop in Linux, I know enough to get around, but not everything—and I'm comfortable with that...

Answer: An Ode to Linux (6 Votes)

The Mac OS X is like a Mercedes; it's the prettiest and cleanest but it costs a lot. Windows is like a Toyota; it will get you there and back.

Linux is like a hot rod; It's for people to dig into and take apart and put back together again. Linux is not for someone who just wants to use the computer; it's for people who love computers. People who don't love computers should stay away from it.

The stuff you learned in Windows won't translate very well, no. But you get to see the internals and watch the engine run.

Try to take Linux as a new toy, that you can play with and crawl into and see what's going on. Things that are easy in Windows are harder in Linux; things that are impossible in Windows are possible in Linux.

If you love computers you can love Linux; if you don't love computers why are you programming at all?

It is a weird question. I've developed on both Windows and Linux. If you are developing a user land business applications the differences are were you would expect them to be - in the libraries, and and maybe the IDE's. The languages after all are pretty much identical. The libraries - well if you are using windows specific stuff you are in for a bit of steep learning curve. But then you always are with new libraries. There are of course libraries that run on Linux, Windows or OSX - like QT, like GTK, like Java, or even Mono if you stick to the subset Mono implements. If you use one of them you just do your development in whatever environment you are comfortable with. This is why it is a weird question - choosing the OS you develop under it about as significant as choosing an editor.

But if you are really moving to Linux to develop a turn key system - you know like Google did with Android or Apple did with BSD - well then you are in for a rough ride. You are about to take on the most flexible and powerful OS on the planet. It runs on everything from MMU less gumsticks to the world's largest supercomputers. As some posters here whining about how hard it can be to use demonstrate, unlike Windows it wasn't never designed configured and sysadmin'ed by someone whose day job is a janitor. If all you want is a computer to write programs on - well maybe staying away from maybe a good idea. Linux is a professionals toolbox, not an end user experience.

Now if you really are in the position using Linux as a tool box to build something with, it's going to take time. And the time won't be spent learning how to write programs on it. That will be measured in weeks at most. You are going to have to learn how to image it and distribute it, how to script it, how to start and stop services, how to network it, how to firewall it, how to add users, hell - even how to add and remove users. Each of these things has twenty different ways of doing it, and you will have to select the one that suits the job at hand. And you are going to have to learn these things the same way the rest of us did. By installing it on random computers at home, googling it when you get stuck, by reading the manuals, by attending conferences and joining communities, and last but by no means least, by reading the source code.

Having the source code is the one great advantage of open source that no one in the proprietary world really gets until they have experienced it for a while. Somewhere out there, somebody will solved the problem you are having, or have have done something similar to what you want to achieve. And it will come with source, and build instructions. And that means you can see how they did it and learn from it. Open source ultimately means the problem is never "I can't", but rather "I can, but it is going to take a while".

PS: the people complaining about device driver problems under Linux are 1/2 right. Some Linux device drivers have to be reverse engineered. Obviously this can only happen after the device is on the market, whereas with Windows the manufacturer ships the drivers on day 1. So on day 1 there might be a problem. On day 180, and definitely after day 365 things are a little different. By that time there have been a couple of releases of Fedora / Ubuntu or whatever you are using, so the reverse engineering has been done and most things just work. This doesn't always fix the problem as it is difficult to buy a new laptop that is 365 days old. Oddly by the time you get to 5 years or so it reverses. Linux is support is rock solid, everything just works. But if you've lost that Windows driver CD, or you've moved to Windows 64bit then you may be out of luck. The adage of Linux shining on old hardware is really true.

fter using those Macs I happily went back to Vista, as it worked for me. I then went to Linux (Ubuntu) and it works great for me. There is choice for a reason, different things work for different people. At the moment I dual-boot between Ubuntu 12.04 and Windows 7, Windows 7 is just for games, I do the rest on Ubuntu.

I have a challenge for you. Install wine and go to their website www.winehq.org and see if you can install one of your windows games and get it working under wine.

If you play World of Warcraft it is one of the "gold" games. There's a search function to look for supported games and applications.

If PC gaming is your thing, Windows certainly makes the most sense. It is by far the most mature and supported platform for such tasks. If gaming were my priority, it would be windows for sure. I don't have time for games anymore, and the home PC is there for internet, photo and video management, budget, and the very occasional office use. You can do all of these on Linux, Windows, or OS X. At that point it just becomes a matter of preference and maybe cost.

We have been MSwindows free for over five years. Not real developer, but I do code for my own projects in several languages. We like to use small resuable modules. Saves on coding and so much easier to debug. Most linux distros are now shunning Mono. Not only for security issues, but it is becoming obsolete even in the ms world from what I understand. Programmers need to learn how to write portable and efficient code. That would save a lot of trouble porting software across platforms. If you are a programmer you have to get out of the dll mindset. Traditionally there was only one or two hardware platforms to deal with. Now that we have more platforms aka arm, software compiler developers need to get their act together for allowing software to be more portable. They can not live in a bubble anymore.

As for a new user, most of the people I know who do MS to linux conversions generally recommend Mint. As for the server side, Redhat, Centos, and also Debian meet the challenge. Having using linux many years, we have lost faith in Ubuntu. They spend so much time worrying about new versions they do not take time to perfect what the already have. Upgrading machines ever six months with a whole new pretty much untested version is not IT friendly.

When I was a system software admin in an MS environment, one of the biggest hassles was when the MS operating system changed. Most software developers did not want to change or update their software until Microsoft ended up changing the new os to solve innate problems. Which means if you went to the new MSOS (mgmt decision) you were screwed if the old applications did not work. Everything does not just always work with proprietary software. In a college environment where students depend on software, you can not expect them to wait and stay in business. So many times I fudged to make software work which included disasembling code and rewriting it. Of cource that comes with all kinds of legal issues too. With open source, making needed changes to software that has source code available to make things work is a blessing. That was the last straw needed to get me to convert to open source.

Anyone who says things "just work", have never done real software support. One of the reasons, you can not always get hardware support on linux has to do with software patents. Legally certain things can not be included, not because they can't be done. Something often left out of the conversation.

There's a LOT of truth to this, both in terms of coding and setting up/managing line-of-business systems. The company I built has its own product, 3rd party products that work with our product, and lots of other moving parts that relate to or integrate with our stuff. You never know in a given month, or even a given day, exactly what is going to be thrown at you. What you do know is whatever it is needs to be dealt with fast and efficiently and in a robust way. One day it is going to be implementing some GUI, the next doing some bizarre ETL task, the day after that tracking down obscure assets in a giant code repository, or adapting a complex build system to work with some outside engineering group's tool chain.

In the sort of environment we're in the honest truth is Windows just isn't adaptable enough. It works fine, but it is just not nearly as flexible. This is the thing though, if you're going to learn Linux and make it an asset in your development process then you DO want to really learn and understand it well at a concept level. Understanding how and why command line tools work the way they do and how to leverage that for instance. This can be a HUGE asset because you have unrivaled flexibility and adaptability to the task at hand. Knowing tool languages like perl is gold as well. Just the fact that there is a low level command line tool available that will do a good chunk of some job without needing to break out a compiler is fantastic.

Of course most of this can apply to any *nix, Linux is really not that special. It is just that it works and is widely supported and easily available. There's a combination of convenience and power there.

I think all too often people come from the Windows side where the 'toolbox approach' seems little appreciated and often simple dev tasks require elaborate solutions; when they get to the *nix side they have no idea how much easier things can be. At that point you're just using a slightly less mainstream OS and trying to do things the hard way still.

My funniest anecdote was some disk space management app I wrote years ago. That was before I'd ever used any Unix at all, but there was a Hitachi Unix box being neglected next to my desk. The director tells me they have this disk space management thing for VMS that they need ported to Unix because they're getting new HP/UX systems. It turns out this thing is like 10k lines of FORTRAN, JCL, and other wackiness. I sit down for a week with 'man' on the Hitachi box and ended up with maybe 100 lines of sed and awk, does the exact same thing, generates almost identical reports. Brains melted. Nobody could grasp how stupidly powerful that toolbox was. They literally refused to believe that the thing worked even with the reports in their hands, lol. Turned out 3 weeks later corporate wiped the whole dept because they were about 30% as efficient as the identical department in another division, lol. Those guys understood, they liked the solution.

You just can't do that kind of stuff with that kind of ease on a system that isn't designed around a toolbox philosophy. MS has been SLOWLY learning, but at the pace of "it took us 20 years to figure out that a better shell was a good idea" I'm not going to hold my breath that they'll ever achieve the flexibility Linux was born with.

Of course most of this can apply to any *nix, Linux is really not that special. It is just that it works and is widely supported and easily available. There's a combination of convenience and power there.

All of that applies to Windows just as well. Powerful commandline scripting language? Yep, heck powershell has some things that I'd love to see in bash and co (passing strings around was fine in the 70s, but could we move on, pretty please?). And most other tools are pretty crossplatform these days.. perl? Check. tcl? I fear so, although I don't know anyone that actually likes it (not that that helps much).

Other toolchains differ, but basically you get the same functionality in windows as well and if you need the unix c toolchain, well cygwin has worked fine for years now.

After the initial setup period, I can get my work done on every OS these days (and yes setting everything up is certainly easier in *nix, no question, but hey that's done only once).

I'm a cross-platform C/C++ developer with over a decade of experience croding for Windows, MacOS, Linux, Solaris, AIX, HP-UX, MVS, and a few other platforms.

The MS-Windows VC++ IDE is a crutch and you became expert at it. If you will only be programming for Windows, this is perfectly acceptable, but if you want to program for the other platforms, then you need to actually understand all the phases and steps used. Programmers from the MS-Windows world tend to learn Microsoft extensions for everything, not the STD C or C++ libraries. Again, that isn't bad, if you're always on Windows, but if you aren't, you'll think that every other platform sucks because they didn't implement the APIs with which you are familiar.

While you can program using vi, gcc and gdb, that is pretty painful once you understand it. After you understand how those tools work, you'll probably want to add a GUI on top - a lite-IDE, perhaps.

* gmake - learning it, know it, love it. It is a smart "project" file with dependencies, but stored in text, not binary.* Geany - a lite-IDE with make, gcc, and gdb extensions. emacs can be used, but ... uh ... why?* ddd - a beautiful GDB front-end for C/C++.

With gcc, always enable all warnings - ALWAYS. Pay attention to them. A warning is something to be corrected, just like a memory leak is.

Of course most of this can apply to any *nix, Linux is really not that special. It is just that it works and is widely supported and easily available. There's a combination of convenience and power there.

All of that applies to Windows just as well. Powerful commandline scripting language? Yep, heck powershell has some things that I'd love to see in bash and co (passing strings around was fine in the 70s, but could we move on, pretty please?). And most other tools are pretty crossplatform these days.. perl? Check. tcl? I fear so, although I don't know anyone that actually likes it (not that that helps much).

Other toolchains differ, but basically you get the same functionality in windows as well and if you need the unix c toolchain, well cygwin has worked fine for years now.

After the initial setup period, I can get my work done on every OS these days (and yes setting everything up is certainly easier in *nix, no question, but hey that's done only once).

Maybe for some people. In my experience machines and VMs come and go constantly, are often configured for specific tasks, and are frequently not entirely my little domain to stomp around in as I please.

I'd also further observe that having a nice shell is only a small part of it. In Linux EVERYTHING fits together with the command line tools. Pretty much every single utility boils down to something that can be strung together with something else on the command line to do just about anything you want. This is very much not true in the Windows world. Frequently you're reduced to figuring out several different GUI tools that handle data in their own idiosyncratic ways and don't play well together with anything else. Creating automated repeatable processes is much more difficult in general. I do a LOT of this stuff, and it is simply WAY easier under Linux/Unix.

Frankly, for a home machine that you set up and just use everyday Windows is fine. For stock workgroup/enterprise services that you install and just use, its not bad. When you're in a dynamic environment where you're doing a lot of different stuff constantly and needing to constantly create various data handling processes, I'd MUCH rather not deal with Windows at all. It just creates a lot more work and there's little if any real upside. It exists here and there at the edges of our infrastructure do to various lock-ins, but it would go away in a flash and not be missed otherwise.

Of course none of these considerations may apply to the OP. I don't know. Each person/organization has unique needs.

Frequently you're reduced to figuring out several different GUI tools that handle data in their own idiosyncratic ways and don't play well together with anything else. Creating automated repeatable processes is much more difficult in general. I do a LOT of this stuff, and it is simply WAY easier under Linux/Unix.

The whole point is that no you don't. There's a port of about every unix tool you could ever think of and lots of other stuff.

Yes you can use some GUI tool to transform all your gifs into pngs (you probably won't find one for linux though), but you can just as well use imagemagick just as you'd under *nix. Since powershell Windows also has finally a really great shell (better than bash imo) so that's no excuse any longer - thanks god for that, because command.com was an abomination.

And I mean if you get a new linux install with not even user local install rights you've got a problem too, because most *nixes also don't come with lots of essential programs out of the box either (clang, python3, python modules, imagemagick,..). Ok yes, you'll have more stuff available, but for lots of people that's probably not the usual problem. I generally have several images lying around to install on VMs with my general stuff, because I also find it annoying having to reinstall dozens of python packages and java libraries on a new linux (and usually a newer gcc, clang and other libraries as well, oh and my IDEs,.. all that stuff also takes time). And I don't reinstall everything on my workstation every other day

Windows is like a Toyota?... I also don't remember a single day (I use Linux for 8+ years) that my installation failed because of lacking drivers.

On windows, even 7, should you not have all drivers previously, you might just not be able to install it at all - I had 3 HP workstations that needed the so called third party drivers at install time to get going.

Also, in case of conflicting drivers, Linux is way easier than windows to solve.. Distros like Ubuntu ship with (sometimes) unnecessary extras, but if they fail for some reason, there's still a chance of success by getting rid of unused drivers and blacklisting others. On windows everything is a mystery, even with the right/supplied drivers you can find your personal hell...

Sorry to disagree, but hardware support on Linux is, in my opinion, in a much better state

My experience couldn't be more different. Years after windows XP worked ok with dual head monitors most Linux distributions failed to correctly install on my computer (with 2 monitors).Only Fedora succeded. But fedora refused to work with my Samsung printer. Also dual head monitors created problems with Linux on many other my computers. Linux had serious problems with my network cards - on Windows my monitors, printer, network cards worked OK without any problems.Finaly Ubuntu Unity looked like half baked system with too many bugs, and so , after Mint failed to install I am stack with Fedora - through Fedora Gnome 3 is clearly substandard OS from usability point of view (too many mouse clicks, too many switches normal / apps view, Too difficult to set shortcuts or icons), at least it works (without printer, however).In my experience, for practically every device on windows you download driver, run it and it works. On Linux you hope that your device was correctly included in your distribution. Or may be you can try to play with device configurations files - it quickly become too complicated for me, through I work as Linux C++ programmer.

Current state of many a Linux distribution ability of booting and properly installing in a multi-boot scenario on UEFI systems with GPT partitions is a major showstopper for me. Only Ubuntu could boot on UEFI system, but I don't dare to install it out of fear that it may fuck up my Windows 7 install. I got burnt in the past by Linux installers writing to MBR of a wrong disk even if explicitly told not to even write a boot record so I think I will just wait for a while until the setups and live cd/dvd mature some more.

Regarding hadware support, it is better than it was but for example my Wacom Bamboo tablet wasn't detected at all and didn't work even as a generic HID pointing device in Ubuntu 12.04 LTS.

Edit: Please excuse any typos and spelling errors below. I type fast (text below took about 20 minutes) and didn't feel like spending a big chunk of my Sunday afternoon crafting a response.

First, I'll suggest some IDE's, there are a ton, but these are my top three:1. Qtcreator - it's a great cross platform ide. The best thing about it is that you can use it as a front end for visual studio on windows, gcc on windows/osx/linux, clang, etc. It has syntax completion, debugging tools, etc. I wouldn't recommend that you spend a ton of time on gdb to start. A decent IDE will give you all the functionality that you are used to with visual studio. The downside of this IDE is that it's young and may be lacking in some features you need.2. Kdevelop 4 - This is another great IDE, with integrated debugging (sits on top of gdb), syntax completion, etc.3. Codeblocks/eclipse/et al - There are a lot of others to look at, but since I do cross platform with QT on OSX/windows/linux, qtcreator works best as an all around general purpose IDE for me. I can use platform specific IDE like MSVC or XCode as needed, but most of the time qtcreator is perfectly adequate.

Next, you need to understand a bit about how dlls work on linux. On linux, as you know, they end in .so. They are linked to the main executable through a binary format known as ELF. To get familiar with ELF, do a google search and you will find a ton of books/articles that explain exactly how dynamic linking works on linux, how to look at the elf header, etc. Below are a few tools that you can poke around with in the mean time:1. readelf - will allow you to look at specific parts of the elf header, including supported functions and their versions (similar to COM, dll's on linux can provide multiple versions. Libc is an excellent example, where a libc of version 2.8 will have methods for earlier versions of elf, ensuring backwards compatibility with executables built on earlier versions of linux.2. ldd - LDD is a great way to find out which .so files have been linked at compile time. It won't show .so's that are loaded dynamically at run time, of course. Strace is more useful for that.3. strace - Allows you to observe system calls as they happen at run time

Next build systems:1. Make + autoconf/automake, etc. - To get familiar with this build system, you can read the gnu book, "automake, autconf, and libtool". It's free and on their web site, just do a google search. While this is the most widely used cross platform build system on linux/cygwin/ etc, I would NOT recommend it unless you need to use it for a specific reason. In my experience it is difficult to work with. Instead, I'd recommend the two systems below.2. Make + CMake - This is an excellent opensource, cross platform build system. Once you get set up with it you will be able to easily create build environments that work on many different platforms. Cmake tends to have less quirks and is easier to use, while still retaining a ton of features.3. Make + Qmake - This is an easy to use build system that is include with the open source QT toolkit. It's not as full featured as cmake, but has gotten the job done for me in the past.4. Make - Make can be used standalone, of course. However, unless your application is simple, I would recommend you use one of the systems above to automatically find dependencies and create the make file for you. It will save you time later as maintaining your build system will be easier.

API's:1. For GUI development, I prefer QT to all other contenders. It is easy to use, ridiculously cross platform (runs on windows, windows phone, linux, OSX, windows, android, and their is an iphone port on the way), and unlike many toolkits that claim to work on all platforms, QT does it extremely well, with plugins for various IDE's on a different platforms, good support for many different compilers, and if you noticed above, their own IDE.2. GTK is another good choice for GUI development, but I've found the support on platforms like windows to not be nearly as good as QT.3. Then you've got the standard POSIX API. You should already be somewhat familiar with this if you've programmed in C, since many of the low level file operations are part of the POSIX standard. A big chunk of POSIX is available on windows too, so if you are careful, you can base your app on POSIX/QT, and port later. Just be careful with threading, if you want to port, use QT's threading instead. QT literally wraps EVERYTHING, so I'd recommend using their API's when you can.

In terms of which distro to use, if you'd asked a year or two ago I would have said without hesitation Ubuntu. These days, I still recommend ubuntu, with some hesitation, as their desktop feels like they are trying to compete with Microsoft to see who can screw up the experience the most. If you can get past it (it's actually not as bad as Metro, but is a big change from earlier desktops), then you'll be fine. I would definitely recommend you stick with a debian variant. With debian you can use synaptic, which will make selecting and installing packages much easier.

In terms of LFS, yes, I'd definitely recommend it, as it will give you a very complete understanding of what's going on under the hood. It may take you a while to get through the book, so I'd recommend that you do it on the side as time allows. You definitely don't need to play with LFS to set up a development environment. It should go without saying, but I'll mention it anyway, do NOT under any circumstances attempt to use LFS as your development machine. Package maintenance is a giant pain in the ass, and with LFS, YOU are the package maintainer. If there is a bug that is configuration dependent, it will be up to you and other LFS users to fix it. You don't want to spend your time debugging your OS. Also, with LFS, it really is from scratch, which means that upgrades also are from scratch. It's a great way to learn linux, but use a standard distribution. It will be easier to maintain, and more importantly, the stuff you build on a stadard development system will be more likely to run without issues on other systems. Linux has horrible binary compatibility, meaning that stuff built on a certain version of redhat may not work on other versions of redhat, and might be even less likely to run on other distributions. This issue is a real problem with LIBC. Stuff built on a newer libc won't run on earlier versions of libc (unless you make sure that you aren't using or linking against newer functions in libc). This means that your build system should be an older machine. However, when developing, you want the opposite, and to be running the latest tools possible. Finding a middle ground has been a constant challenge for me.

Frequently you're reduced to figuring out several different GUI tools that handle data in their own idiosyncratic ways and don't play well together with anything else. Creating automated repeatable processes is much more difficult in general. I do a LOT of this stuff, and it is simply WAY easier under Linux/Unix.

The whole point is that no you don't. There's a port of about every unix tool you could ever think of and lots of other stuff.

Yes you can use some GUI tool to transform all your gifs into pngs (you probably won't find one for linux though), but you can just as well use imagemagick just as you'd under *nix. Since powershell Windows also has finally a really great shell (better than bash imo) so that's no excuse any longer - thanks god for that, because command.com was an abomination.

And I mean if you get a new linux install with not even user local install rights you've got a problem too, because most *nixes also don't come with lots of essential programs out of the box either (clang, python3, python modules, imagemagick,..). Ok yes, you'll have more stuff available, but for lots of people that's probably not the usual problem. I generally have several images lying around to install on VMs with my general stuff, because I also find it annoying having to reinstall dozens of python packages and java libraries on a new linux (and usually a newer gcc, clang and other libraries as well, oh and my IDEs,.. all that stuff also takes time). And I don't reinstall everything on my workstation every other day

Yeah, I don't know what sort of stuff you do or what your needs are. I can tell you from both experience and analysis of the actual man-hour costs of doing stuff that we bill for that there's a definite and non-negligible cost benefit to using Linux. Stuff just plain gets done faster and cheaper and that's the bottom line. The *nix tools work better, do more things, and the vast majority of the ones we need and use are simply there on any system. Even if I've got some machine that I don't have admin level for I can install anything locally to an account that I'll ever need. Consistency is higher between systems, pretty much regardless of distro, and frankly we can put together management solutions in a trice that require a lot of hand waving and extra work to do on the Windows side, if they can be done at all.

Must be a bloody long time then, since Visual Studio's C++ compiler has been one of the most standard conformant since 2003.

Frankly Eclipse is a toy compared to it.

Well, you are comparing compiler to an IDE. Sure, you are competent enough to call a project with 46 million lines of code "a toy".

No I'm not. Eclipse is an IDE as is Visual Studio. Most people are sensible enough to parse that sentence are realise "it" refers to Visual Studio rather than the C++ compiler specifically.

And since when does the number of lines of code equate to a products quality? An IDE exists to support the developer so they can focus on the problem domain. Eclipse doesn't do that nearly as well as Visual Studio.

Edit: Please excuse any typos and spelling errors below. I type fast (text below took about 20 minutes) and didn't feel like spending a big chunk of my Sunday afternoon crafting a response.

[snip]

Nice post, even contained interesting bits on topics I don't fully understand! At least it addresses the issue OP put forward. Does the OP know that this question was cross-posted to ArsTechnica btw, or is this just a thread about a thread? Perhaps copy/paste it to that discussion as well?

Glowbeans wrote:I clicked this with the intent to find some helpful tips about transitioning from windows to linux on the home box. What I got was people offering suggestions to do linux from scratch.

Outside of ordering a live CDROM disk from Ubuntu, I don't know what's easier "to transition from windows to linux" than following the instructions on Ubuntu.com or any of the other Linux websites. Depending on where in the world you are, you might be able to order a computer already setup to boot-up in some Linux distribution, easiest, but not necessarily cheap.

Not sure which comment(s) you are referring to but trying out a Linux distro is VERY easy. You'll need a DSL or ISDN connection at the very least. Usually the distros are "live-CD" images, an iso of a install CD.

1) Go to Ubuntu.com. (Firefox works well with Ubuntu's web site.)2) Select the Desktop image so you get the GUI version. I suggest that it be the 12.04 version. the version 11 versions are a bit weird on certain hardware.3) Download it. It will be about 700 MegaBytes. Start it and go to bed is what I usually do. There is a Torrent download option also but I haven't had much luck with Torrents.4) Use Roxio or Nero or other software to burn the ISO file onto a CD-R. I've had best luck getting them to boot later when its on a CD-R.5) Set your BIOS to boot from a CD/DVD first. 6) Follow the prompts. When it says Boot from a CD? Press any key.7) Ubuntu will ask DO you want to install or just look around (try it out) select try it out. The entire file system gets installed in your RAM so you'll need 512 MB at a minimum, I'd suggest at least 2GB.8) When it comes time to install it on the computer IF YOU CHOOSE DUAL BOOT it will need some empty space to install. The easiest way is to put an empty SATA or PATA drive in the computer before boot-up. 9) When installing Linux there will be a step that will tell you that there is a Windows installation already on the computer: Do you want to remove it? Install along side it ? or OTHER. Other is the option that opens the partition editor and allows you to re-size the current partitions on your drives. 10) If you only have one drive, you go through the partition editor and manually reconfigure your C drive, please understand the drive names change under Linux. What's usually the physical drive 0 (usually Drive C is the first partition on this drive in Windows) is now called sda. SDA can have multiple partitions. The second physical drive is called sdb. Re-size sda1 (C drive) so that there is about 100 GB of empty space AFTER the NTFS partion. THIS WILL TAKE A LONG TIME. BE PATIENT.11) Assuming sda isn't maxed out with Windows, if there is any empty space (more than 100 GB say) you can install Linux on it. But adding an empty drive is much more preferable. 12) During installation the GRUB bootloader will be automatically initialized to reflect the proper partitioning. 13) WITH 2 physical drives, you can just put Linux on the second drive. Be sure to indicate to the partitioning tool that you want to install on sdb. 14) If you partition manually, make sure to allow the same space for the swap partition as you have RAM. If you have 4GB of RAM, make the swap partition as 8GB. The root partition is labeled as: / and the third partition can be set to /home. 15) Please note that if you have a "recovery option" partition (Dells and HP's do this practically to all systems) they will cease to work once Grub (system loader for Linux and Windows) is installed IF YOU HAVE a single drive. 16) Ubuntu and most other Linuxes will allow you to reconfigure the partitions and allow you to re-size Windows NTFS partitions to allow for a dual-boot system. Grub becomes the new menu that pops up replacing the ntldr menu allowing you to start multiple versions of Windows.

Done. You're running Linux on a dual-boot system.

Yes there are 14 steps there and its not just like a standard bootup but it is easy.If you want to make it even easier, follow the following.

1) Do steps 1 through 5 above. 2) While you have the computer turned off, pull the Windows hard drive and replace it with a blank drive.3) Turn on the computer with the Linux CDROM disk you made in step 6.4) Let the system boot from the CDROM. 5) Do step 7 above. Select Install this time.6) Done. You're running Linux and you're free of Windows.

You don't have a CDRW drive, then you can do a similar process unto a USB flash drive. The Ubuntu website has details.

If you are willing to do the above to NOT HAVE TO PAY for your operating system, then you'll learn more about computers than your buddies. The really nice thing is that you'll also have web browsers, email programs, office software, IDEs (Eclipse, NetBeans), games etc. Most of the programs come with documentation, sometimes good, sometimes not-so-good. BUT ALL FOR FREAKING FREE!!!!!!!!!

And since when does the number of lines of code equate to a products quality? An IDE exists to support the developer so they can focus on the problem domain. Eclipse doesn't do that nearly as well as Visual Studio.

Opinions differ greatly on that. VS does some things good, but lots of things are just plain horrible. Different coding styles for different projects? Why would you need that, there's only one extremely narrow way anyone would ever code after all. Refactoring? Only a toy needs that.

Yeah, I don't know what sort of stuff you do or what your needs are. I can tell you from both experience and analysis of the actual man-hour costs of doing stuff that we bill for that there's a definite and non-negligible cost benefit to using Linux. Stuff just plain gets done faster and cheaper and that's the bottom line.

Okay, but how can you objectively state whether that is due to actual differences in ability between the two ecosystems or your own area of expertise? I'm sure the average Microsoft shop could truthfully make exactly the same statements in the opposite direction.

Yeah, I don't know what sort of stuff you do or what your needs are. I can tell you from both experience and analysis of the actual man-hour costs of doing stuff that we bill for that there's a definite and non-negligible cost benefit to using Linux. Stuff just plain gets done faster and cheaper and that's the bottom line.

Okay, but how can you objectively state whether that is due to actual differences in ability between the two ecosystems or your own area of expertise? I'm sure the average Microsoft shop could truthfully make exactly the same statements in the opposite direction.

Well, I can measure myself against my competition, and I know I beat the heck out of them on cost. Beyond that, many times the exact same tasks come up again and again on different systems. I've got people on staff who are perfectly conversant in Windows. The same guy will do the job quicker, generally speaking, on one of the Linux servers. There's just a lot less runaround. In certain environments and for certain types of work things may be less different, but IMHO Windows is not really as easily adaptable to many tasks, harder to manage, and lacks the level of simplicity and modularity of tools. There IS a reason people use it a lot you know

And since when does the number of lines of code equate to a products quality? An IDE exists to support the developer so they can focus on the problem domain. Eclipse doesn't do that nearly as well as Visual Studio.

Opinions differ greatly on that. VS does some things good, but lots of things are just plain horrible. Different coding styles for different projects? Why would you need that, there's only one extremely narrow way anyone would ever code after all. Refactoring? Only a toy needs that.

Assuming ReSharper it makes a really good C# IDE though.

Eclipse is a pretty strong IDE. Like anything it does have its strengths and weaknesses, but certainly in the Java Enterprise development space it is quite strong. IntelliJ and Netbeans do some things better, some things worse. One of the nice things about Eclipse is it is pretty friendly to external tools and even when it is 2nd best at something it is good enough that it is generally more convenient to stick with it simply because you don't have to learn 4 other tools. I mean if you're going to be doing a lot of say Javascript all the time then you might just want to use Netbeans for instance (which is a lot smarter about even basic JS stuff). I've really barely touched using it for C++, so I can't comment much on that.

Well reading this article really has made me think. I'm a normal computer user and have no interest in programming so it's quite clear, Linux is not for me. I just want to be able to come home at the end of the day from class or work and enjoy using my computer rather than have to scratch my head and figure it out.

Well reading this article really has made me think. I'm a normal computer user and have no interest in programming so it's quite clear, Linux is not for me. I just want to be able to come home at the end of the day from class or work and enjoy using my computer rather than have to scratch my head and figure it out.

I have a kid that has been using Linux since the age of 6. 99.9% of the time, the most said kid has had to do is restart Firefox or kill a hung program, as the most technical thing. The same thing could be done in Windows, or OS X, and individual results may vary a little, but it was astonishingly easier to install Ubuntu even 5 years ago than Windows. Other than that, who cares which OS you run? I'll probably be too comfortable to switch from Windows, unless MS goes completely nuts with Metro by the time I next upgrade.

Well reading this article really has made me think. I'm a normal computer user and have no interest in programming so it's quite clear, Linux is not for me. I just want to be able to come home at the end of the day from class or work and enjoy using my computer rather than have to scratch my head and figure it out.

Then Ubuntu is the perfect Linux distro for your needs -- it doesn't require any compiling or other hacking to get it to work. Just lean back and do what ever you wanted to do http://www.ubuntu.com/

Well reading this article really has made me think. I'm a normal computer user and have no interest in programming so it's quite clear, Linux is not for me. I just want to be able to come home at the end of the day from class or work and enjoy using my computer rather than have to scratch my head and figure it out.

I have a kid that has been using Linux since the age of 6. 99.9% of the time, the most said kid has had to do is restart Firefox or kill a hung program, as the most technical thing. The same thing could be done in Windows, or OS X, and individual results may vary a little, but it was astonishingly easier to install Ubuntu even 5 years ago than Windows. Other than that, who cares which OS you run? I'll probably be too comfortable to switch from Windows, unless MS goes completely nuts with Metro by the time I next upgrade.

That's great for him that he's grown up on it but even as a 23 year old mechanical engineering student reading the article just gave me a headache more than anything else. My computer is means to an end and like the article implied if your computer isn't your hobby Linux isn't for you (meaning people like me)

Answer: skip the Linux step and go directly to a Mac. That's where you'll eventually end up anyway (unless you're one of those FOSS crackpots who refuse to use any non-free software).

I did that step but in reverse. Went from Windows to trying a Mac... and hated it. I find that for some OSX just works. For others, like myself, its a total mess and crash fest. I had OSX 10.4-10.6 (I used friends macs, I didn't buy one) and I averaged a total system crash in 5 minutes on 7 Macs, just doesn't work for me. And yes trolls, I really did try a Mac, its why I tried a few different ones to make sure it wasn't a lemon. One crashing is a fluke, 7 crashing is a pattern. Even killed one Mac's wireless without meaning to. I just didn't like it in the end (best comment I did get about OSX though was "Stop using it like you want to and just start using it like Apple wants you to use it")

Not to mention, I find Macs are just plain ugly. All the effort they put into making it look "clean and polished" just comes across to me as "sterile and plasticy". That just doesn't ring with me.

After using those Macs I happily went back to Vista, as it worked for me. I then went to Linux (Ubuntu) and it works great for me. There is choice for a reason, different things work for different people. At the moment I dual-boot between Ubuntu 12.04 and Windows 7, Windows 7 is just for games, I do the rest on Ubuntu.

PS, I'm not bothering to respond to the trolls so don't bother. I really did use that many Macs, I really did have those problems, I really am telling the truth and I really don't give a crap if you feel the need to insult me and declare I must be lying and whatnot because I found that OSX wasn't perfect and god knows what else. I've mentioned this before and I've dealt with trolls before and bluntly put, I'm just tried of dealing with it. If you have a serious comment I will respond, trolls are ignored.

What were you doing?

Having that number of crashes on any modern OS smells fishy. I work with Windows 7 and OS X on a regular basis, and don't have these issues. I doubt most of the users on Ars have either...

Well reading this article really has made me think. I'm a normal computer user and have no interest in programming so it's quite clear, Linux is not for me. I just want to be able to come home at the end of the day from class or work and enjoy using my computer rather than have to scratch my head and figure it out.

I have a kid that has been using Linux since the age of 6. 99.9% of the time, the most said kid has had to do is restart Firefox or kill a hung program, as the most technical thing. The same thing could be done in Windows, or OS X, and individual results may vary a little, but it was astonishingly easier to install Ubuntu even 5 years ago than Windows. Other than that, who cares which OS you run? I'll probably be too comfortable to switch from Windows, unless MS goes completely nuts with Metro by the time I next upgrade.

That's great for him that he's grown up on it but even as a 23 year old mechanical engineering student reading the article just gave me a headache more than anything else. My computer is means to an end and like the article implied if your computer isn't your hobby Linux isn't for you (meaning people like me)

Eh, the reality is generally far easier and more friendly on people than what some would like to portray. You're right though, there's not a vast compelling reason to switch away from Windows for the average person. If there was, then Linux would probably be on a lot more desktop/laptop machines. There are some slight advantages though. No bloatware is nice, and an utter lack of any real malware is another. Basically its all up to what is convenient for you. If Ubuntu were on 90% of the PCs in the world, then it would be the same only reversed. I'll stick with Linux because I know it and it is easy for me, others will stick with what they've got. It's all cool

Well reading this article really has made me think. I'm a normal computer user and have no interest in programming so it's quite clear, Linux is not for me. I just want to be able to come home at the end of the day from class or work and enjoy using my computer rather than have to scratch my head and figure it out.

I have a kid that has been using Linux since the age of 6. 99.9% of the time, the most said kid has had to do is restart Firefox or kill a hung program, as the most technical thing. The same thing could be done in Windows, or OS X, and individual results may vary a little, but it was astonishingly easier to install Ubuntu even 5 years ago than Windows. Other than that, who cares which OS you run? I'll probably be too comfortable to switch from Windows, unless MS goes completely nuts with Metro by the time I next upgrade.

That's great for him that he's grown up on it but even as a 23 year old mechanical engineering student reading the article just gave me a headache more than anything else. My computer is means to an end and like the article implied if your computer isn't your hobby Linux isn't for you (meaning people like me)

The headache is only if you're trying to do programming. My kid doesn't know how to use a command shell, just play music, videos, surf the web, play Flash games (inferior to Windows' version of Flash, but usable), occasionally draw, write papers, play a few other games.

I have 2 customer which one running on windows server , another running on linux . both are having about same volume of traffic . the different ? the windows server need to restart at least once a week while the linux, the last time I restart is one year ago .

for programming ? if you don't like C++ style or java style, you can choose vb style like realbasic or gambas. you can also find a lot of programming languages on windows that offer you port to linux or mac without need to rewrite your program

Well reading this article really has made me think. I'm a normal computer user and have no interest in programming so it's quite clear, Linux is not for me. I just want to be able to come home at the end of the day from class or work and enjoy using my computer rather than have to scratch my head and figure it out.

I'm not in IT, I'm a used-books dealer. I used to be a Windows user, who around the time of Windows ME, started dabbling with Linux as a "just in case" escape route. (I already knew about Linux and in theory I was interested in learning how computers work, but in practice up till then I was too busy surfing the web to actually dig into it).

About a year and a half later I realised that though I called myself a Windows-user who dabbled with Linux, I was actually spending all my time in my Linux partition -- it was just so much less trouble, I didn't actually even realise this, until a power surge triggered a reboot, and Windows (still my default boot) informed me it had been nearly 400 days since my desktop last booted into Windows, and scan-disk needed to check my file-system. (Because I ran SETI@home and Folding@home, I left the computer on 24/7 -- something that didn't work very well with Windows, though I understand it's gotten much better, now).

Of course, if I was a gamer, I would have needed Windows more, and it would have been a little different story, But really, the less you want to fiddle with your computer, the more sense Linux makes.

It's always funny listening to Windows users give advice on *nix programming and use. Funny Windows users. They like to try and force *nix to behave like Windows and then blame *nix when they can't.

While the author acknowledges that his "hatred might be associated with not knowing enough", I propose that, from his question, he knows very little and is trying to make things harder than they are.

This isn't Windows. Every tool does one thing and does it very well. And there is a tool to do anything. And that tool does it easier and better than Windows can. Unlike Windows, it won't try and do it for you either while limiting what you are allowed to do.