Ask HN: What are your biggest frustrations with Linux development?

34 points by buildops ↗ HN
For those of you who develop using Linux, what are your biggest frustrations?

Builds? CI? Testing? Lack of good IDEs? Lack of visualization? Dev tools? Refactoring? What are your challenges? (and of course what environment are you using and how does that affect it?)

74 comments

[ 3.3 ms ] story [ 135 ms ] thread
Lack of good hardware/laptops.

I had a Lenovo X200s for over 4 years and finding a viable replacement is almost impossible.

I am saddened by the fact that there are no i7 / 16GB / highDPI with decent keyboard at the price of a 2015 Retina MBP.

Try a 2015 Dell XPS 13. Fits all your specs, also has a developer edition with Ubuntu already installed.
No, it doesn't. The XPS 13 can only have a maximum of 8 GB RAM.
It's true, but I thought the limitation was that it only supports a single dimm and there aren't 16GB single dimms yet?
I believe the RAM is soldered in, so it's not like you could replace it later.
Developer edition is not out yet... I thought. I got one a couple months ago and run Arch on it. Support for the microphone hasn't made it into a kernel release yet, so I thought they were waiting for that to release the developer edition.

Also, it only supports 8 gigs max right now. I'm sure a 16g single dimm will come out eventually, so you could upgrade it yourself.

I believe the RAM is soldered on, upgrades may not be very feasible.
Oh no... you're right. I guess I'll just convince myself that 8GB is TOTALLY enough :-(
Have you looked at the Clevo 230SS? It goes under the name Optimus VI with PC Specialist.
I'd warn you that I'm running a Clevo 230ST more or less maxed out on RAM and CPU, and while its a fantastic machine performance wise, and has a pretty good isplay and keyboard, the cooling is atrocious. Despite usually sounding like a jet engine it pretty regularly throttles the CPU due to overheating.

At some point I'll get to dismantling it and seeing if some more thermal paste helps matters, but in the meantime it can get really quite irritating. I'm currently sitting in a warm coffee shop window, and parts of it are getting to the point where they're uncomfortably warm to touch.

Same. I spend at least 2 days a year keeping my MBP installed with Ubuntu. Any major OSX upgrade and I need to reformat my Ubuntu partition and I'm constantly running out of space on both OSes. If Linux had proper video editing I wouldn't need to do this.
I'm using HP ZBook 15 G2 Mobile Workstations with ubuntu 14 LTS since last 3 months. The only thing i miss is SSD that i didn't choose in my customization. Has 16GB RAM, i7 . I switch between Win 8.1 and linux (something lxde instead of unity). The nice thing about this linux can run VMs and it is pretty fast and even containers work well. Also Win 8.1 ultimate has hyperv role so you can use that as a hypervisor as well.

Initially i had 64 bit 15.x but some unity programs used to crash when it released , so i installed something good.

I'm didn't find any problem with anything until now.

http://www8.hp.com/in/en/campaigns/workstations/zbook-15.htm...

http://www8.hp.com/in/en/products/laptops/product-detail.htm...

Unfortunately, one look at that will tell you that it's no match for the rMBP in design or portability.
What's your issue with the x250? It goes up to a i7-5600U, has a great keyboard with a tolerable layout, resolution up to 1080p which is pretty decent for a 12.5 inch screen. It even has a SO-DIMM slot rather than soldered on RAM so you can do 16GB of memory (caveat: 16GB SO-DIMMs are single-source and not cheap).

The x250 is still a hard upgrade to justify if you're coming from an x220/x230, due to the ULV processor. But there should be no question when coming from an x200.

try ASUS Zenbook - best linux hardware I was working on so far.
Try the Asus Zenbook UX305, everything works out of the box with Ubuntu and it's as thin as a Macbook Air but more powerful and with a ridiculously high res screen.
* Having to make efforts to keep the system working smoothly after regular system updates

* Hardware vendors not showing much love

I use server/workstation parts for systems (not a laptop guy), so that's not so much of a problem, but can still be an issue with e.g. having to use a newer kernel that's not getting security update love.

The update issue can be problematical with not all that many distros providing Long Term Support. systemd + Debian's short term support, one year after a new version plus a volunteer effort starting with squeeze is prompting me to abandon it and its famed stability between releases. I'm trying Alpine for Xen, with probably the current LTS Ubuntu without default systemd for development and who knows what else on VMs.

Ah, yeah, the chaos in GUIs is not good, e.g. Gnome going off in a bogus direction after version 2. I'm happy enough for now with Xfce, but its got less mindshare.

(comment deleted)
I've never had those problems with my laptops (though I exclusively use Thinkpads). Multi-monitor works pretty well out-of-the-box with the big desktop managers (Gnome/KDE), and even using xrandr manually is not that hard.

Audio with alsa has also been a painless experience for me, though I heard differently from some people.

Using Debian (which is not well known for always having the most up-to-date releases), I've as of yet never had to compile my own kernel to enable any of these.

This has to be some sort of satiric joke ...
> If you want working multi-monitor support you will pretty much have to compile your own kernel, add custom repos, and manually configure X.

I don't think this has been a problem in years, and even 10 years ago I never had to compile my own kernel for multiple monitors to work.

I only tried working with one external monitor, but I had absolutely no problem with it what so ever.

Audio is working great out of the box for me and I had no troubles with the trackpad neither, which I did have on my Windows system (basically, I couldn't disable some of its gestures and trackpad worked even when my fingers were slightly above it but weren't touching it, which was highly annoying to me).

I had no problems at all with one external monitor, aside from BIOS output only ever going through the internal Intel GPU, so I couldn't use the console.

To get a 3rd working, I had to buy a second GPU (since there seemed to be no way to use the internal Intel GPU for X at the same time). So: 2 monitors with my original graphics card, 1 monitor with my new one.

This was then somehow incompatible with XRandR, so I had to set it to use Xinerama. GNOME 3 is incompatible with Xinerama, so I had to switch to GNOME 2 - or, to be more accurate, GNOME started up in GNOME 2 mode without giving me any indication why.

GNOME 2 was incompatible with all of the GNOME addins I'd installed. Also, it had a completely different UI. Like... completely different. And every time I launched an X11 program, it moaned on its tty about XRandR being missing.

All in all the experience was far from slick.

What I did on Windows: plugged 3rd monitor into socket for internal Intel GPU. Ticked box to say I wanted desktop on 3rd monitor. It worked.

I run three monitors on Linux using a single GPU that natively supports three monitors (e.g., an eyefinity AMD card). It just works.
I develop applications in C++ on Linux and Windows. On windows I can enable heap tracing and have leak detection included in my test cases (Google mock/test). On Linux I need to run my app under Valgrind for leak checking as a separate process.
You want to make ASAN builds (simply build with clang or gcc > 4.8 with -fsanitize=address on the command line).

Then you can break in a debugger, and do some tricks, explained in this page: https://code.google.com/p/address-sanitizer/wiki/AddressSani....

This will also detect any memory trashing or the like, while being quite fast (compared to valgrind, of course). Then if things are really weird, you can use valgrind.

I have to say I'm pretty satisfied, even more than I was before when I was using Windows.

Everything seems easier to install and I don't need gigabytes of space to build my environment. (Visual Studio, I'm talking about you!) Working with Git and gcc was as easy as it can get right at the beginning of my switch. Back in Windows days, I was primarily using Dev-C++ and a GitHub desktop client (which I really don't like btw). Now, I'm just using Atom with a couple of third party extensions.

Although I have to say that I kind of miss the easiness of building desktop applications using Visual Studio. I haven't found a single IDE that allows me to create forms with just a few clicks like Visual Studio does. I stopped paying attention to GUIs for my programs primarily because of that.

If you are willing to do Qt/C++, QtCreator can easily create forms, the same way as VS.
I have to mention it's not as straight forward last I tried it, but it's still usable. My lack of C++ understanding has kept me from really getting into Qt / C++ though.
You can use Glade for GTK+ and QtCreator for Qt
From my experience several years ago:

Distributing binaries for Linux was complex. libstdc++ compatibility across distros or different versions within a single distro wasn't great.

(Compared to Solaris, it seemed like libraries were always backwards compatible. Running old binaries always just worked.)

Dealing with lazy people asking stupid questions and making everyone loose time and resisting the urge to pick on them.
Sometimes, people just don't know.
Most of the time techies don't know either, but have a sensible approach to finding out.
I once went into the #debian channel on Freenode. I'd gnaw off my right arm before I'd enter there again. But I think you'd be right at home.
I'm mainly developing PHP applications (Magento, Symfony) And I found Linux much easier. Back in 2000 (ish), when I switched to Linux the biggest confusion was the different format of configuration files and scripts. In Windows, I get used to .ini files and .bat batch scripts. When I switched to Linux (well, it was more like a slow process) I was confused about this. Fetchmail config format, the apt sources tree format (which seemed to be an .ini) and all the config files in /etc was all different. I finally managed to get my emails fetched and sorted to different folders based on topic and sender, using Fetchmail, then I was happy to read them in Mutt. The UI looked terrible (well, it was text after all) so I tried Balsa and used it for years, then Sylpheed, Claws Mail, still backed with Fetchmail. I can imagine that the different GUI libraries would confusing others, but I always managed to sort my installation to use only one. If I had KDE, I installed only KDE or at least Qt programs. If I had GNOME, then so that it. Nowadays, I use AwesomeWM mainly with 3 or 4 software only, on 3 screens: the first screen is the terminal with tmux, the second (middle) is the browser, Thunderbird, the third is Sublime, so I don't get nervous about installing different libraries.

With all of these, Linux felt better than Windows and it's openness and community support encouraged me to discover more and more. Back in those days I really tried every programming language I could: Java, Ruby, C, C++ and I had no confusion learning and using these on Linux. I was only confused when sometimes I had to switch back to Windows. The lack of documentation, missing libraries, unpredictable crashes on software upgrades (which came from different sources, absolutely without automation, manually running setup.exe's) and different UX, unsought taskbar icons really annoyed me. Now if I sit in front of a Windows PC, I feel it's just an useless gadget.

Linux was the cause I became a software developer.

I have only experience with one IDE, which was Netbeans. I used it mostly for developing Rails applications and I found this was the only IDE which does not get in my way. I just can't get used to PHPStorm today and I found Eclipse too slow, so I'm using Sublime as my primary editor now. Before it was Geany, gEdit or just Vim. I was never able to learn Emacs, but probably it's my fault :)

Thinkpad running fedora, a dream come true.
I love working on Linux, running Ubuntu 14.04 LTS on a Lenovo S540 (lightweight, 16gb ram,i7,ssd). The biggest pain point for me are mainly using tools that other parts of the business want to use like:

Slack -> No Linux support, Zoom (video conferencing) -> Early beta support, 1Password -> I use last pass instead.

Macs have really dominated some areas of the tech scene especially in the non engineering sections of the business, thus collaboration tools and such seem to be Mac orientated or Mac only.

In every other respect I'm far more comfortable and productive on Linux.

I know HipChat runs on Linux very well, and on most of (if not all) my other devices. If you could convince your company to make a switch somehow, it could work. But sadly that's a nice big if, not sure if you're in a situation or position capable to convincing them. I'm also not sure of the differences between Slack and HipChat, I've only used HipChat.
We migrated away from HipChat, I think the only thing that HipChat does better is it's support for Linux. Overall personally Slack is better but for a company with such huge funding it's surprising not to see a linux client.
But slack do have Linux "support". You can just use the IRC gateway through any Linux clients, or look up a project like slk, https://github.com/drikin/slk

There are also projects that wrap around 1Password. http://www.lucianofiandesio.com/1password-in-linux

It's far from perfect. But the great thing with Linux in my opinion is that there are always alternatives.

Oh yeah, my only minor grumblings against it are lack of one or two clients, I think with Slack's case I'd like to see them make an official client, with $160m in funding I'm sure there is leeway to get an official linux client in the works. Thanks for the slk link, gonna check it out! :)
You can use http://refract.mkelly.me/ to install Slack as a standalone web app (in Firefox and Chrome). I've done this to many service which I use frequently: Trello, IRCCloud, Messenger, Inbox, etc. and it works really well. The added benefit is that I don't need to be logged into these services on my main profile.
Anything sysadminy like building third party libraries or configuring tools and getting them to work. I just want to write code, not fight with installation and configuration. Editors and dev tools are all fine after they are installed and configured.
What I think really lack in Linux is:

- Good hardware that is nice to use (look beautiful) and works well with Linux.

- A great IDE that doesn't look like shit right out of the box. I know many can be configured and tampered with, but I simply do not enjoy that enough to go through the pain.

Otherwise, my biggest pain and why I definately go back to Windows is that I can't play my games on my machine. Many games still only work on Windows or works much better on Windows due to bad graphics drivers.

I really like Linux, I always use it as a server or to host stuff. But in the later years of my life I simply get too frustrated (often with small stuff) to keep using Linux as my main desktop operating system.

At work I use a macbook because it has nice to use hardware with desktop software that is more polished than any linux distro but still keep the unix feel.

Have you given the JetBrains IDE's a shot? There's also Qt Creator for C / C++. Not sure what kind of development you do, but there are some nice IDE's that come pretty out of the box. The only friction is installing them, though in the case of JetBrain you just download it, unzip it, and run it, it adds its shortcuts where needed.
I think the trick is to cherry-pick laptops. There's only a handful of decent laptops in the market that run Linux very well (drivers in kernel, perfect powersaving, ACPI events from battery, etc).

My MacBook Air 11 inch 2012 (formerly used by Linus) is pretty good. So were some Lenovos like x220. These days Chromebook Pixel or Dell XPS hold some promise. Also cheap Chromebooks like some Acer and some Asus. I have my eyes on cheap ARM machines for their capability to run blobless (e.g. Asus C201).

The keyboard is missing keys (like delete) and there is no button on the mouse. Small things but pretty annoying if you are used to clicking the middle button for pasting. And the battery seems to last about half of the time compared to OSX
I get an _extra_ 10-20 min in Linux vs OS X thanks to powertop tweaks implemented via udev rules and a minimal desktop with a tiling WM and no desktop environment.

But I agree on the annoying omissions. I hate no dedicated insert, although shift + backspace works well.

#1 Since you have a liking to apple hw. Ubuntu does support apple laptops so if your heart is with apple hw - give it a ubuntu try.

#2 Sublime text, Komodo edit, Netbeans, etc. What is your complaint on IDE front?.

#3 This is a post about Linux suitability for development environment. If you wanna play games get one which is more suited and use it for the purpose. Even a dual boot environment. Mixing development environment effectiveness with ability to play games on it doesn't even sound right.

Unstable virtual box networking on my arch machine that requires occasional suspend and resume of a vm. No good looking and stable gui client for mysql.

I've been doing dev with linux for most of my carrier and I honestly don't know why would someone use another os. Windows dev looks very weird to me with trillions of popups, little windows and checkboxes. Mac looks like it's trying to replicate linux tooling and while it's pretty good you still need to jump some hoops

The debugging workflow is a mess.

The visual studio debugger is great. gdb and various front ends for it are all various levels of not so great. There is a better featureset in gdb for the very skilled users to do tricky things, but it's still a bear to learn and get conformable with.

Putting the .build-id directory on the network and getting subsitute-path pointing at the right location to debug a continuous integration build from 16 months ago? The hardest part is happening to learn those features exist, and the legwork to make it quick and easy to use is PITA too.

Some developers... they just want to open the visual studio debugger and smash "step over/into" until their code works. This isn't the best approach to development and they should probably do a bit more "sit and think about the code" in their development. But professionally I have to support this workflow, it's much smoother in VS than when targeting linux. And it's not an excuse for bad debugging tools either, sometimes you do need to spend a day in the debugger to solve things.

Don't really have any frustrations to be honest. All my personal projects and stuff I do for fun (both mostly in ruby) I do on ubuntu 14.04. Use VIM, a lot of plugins and some custom CLI tools. Have never tried developing on Mac, though so maybe I just don't know what am I missing (windows isn't even a thing for ruby devs. And for good reason).

Only thing I'm kind of missing/sad about is lack of games on Ubuntu. Upside, though, I won't get lost in a "quick 20 minute brawl to clear my brain" that never lasts 20 minutes....

For sake of honesty, I do my daily job on windows. Stuff I use there is awesome. VS is nice, Windows domain works well enough and lync, outlook, fiddler, slack etc. are all nice. If, for w/e weird reason, I had to do my daily job on linux, I would be sad.

But most likely, I'm not frustrated with linux because I chose to use it for fun etc. If, in any point in my life, I would have been forced to use linux, I'd probably find a lot of problems with it.

//EDIT And uhm. I've never really had any problems with linux and hardware. For personal stuff I still run an old thinkpad t420s which hardware gets along with linux a lot nicer than it did with windows 8. Touchpad acts a bit better, touchpads 3rd button actually provides some nice functionality and most importantly, gsm card worked out of the box (something I never got up and running on windows 8). Once more, for sake of honesty, it shipped with windows 7 so maybe the drivers provided for the gsm card aren't compatible with win8. who knows.

Never had any problems with my desktops running Linux nor my previous thinkpad either.

I did the switch from OS X to linux about six months ago and I am pretty much using the same tools for front and back end web stuff. Then there is a huge plus for all the free new knowledge you get from using linux as a "power user", so if anything, the switch made it easier to deal with all kinds of things.

I suppose the question was more about low level development than in my case, where tools depend more on the system it's run on, but for me it has only been positive.

Development tools on linux continue to be great. A visual studio quality ide would be nice, but realistically I'd continue to use vim and the terminal.

What really irks me is the desktop environment situation. I haven't had a linux install in a couple of years and it seems that all of the desktops have gotten worse in the last few years. Unity continues to add on terrible features and follows the similar ui antipatterns and gnome 3 has. KDE4/5 are decent but very heavy. Xfce and lxde are great but you occasionally run into some weirdly missing features (no font manager -- why?) that make you pull in gnome/kde and question why you picked a lightweight desktop in the first place. I'm not sold on the tiling window managers, ya the tiling is nice, but they look terrible, require way too much config, and sometimes I just want to use the mouse damn it.

Linux Mint might be an option. It's essentially Ubuntu, but it swaps GNOME for Cinnamon which does away with a lot of the more recent GNOME changes.
(comment deleted)
Using xubuntu, switched from crunchbang a year ago after a drive failure.

It has some weird problems like forcing gnome-keyring-daemon to run which breaks ssh-agent. The only fix I have found to to create a wrapper script that always disables its ssh component.

I sometimes get focus issues requiring me to tab through the windows to refocus the correct one.

I dislike the practice of littering my home directory with dotfiles. I prefer them to be put in .config. I have 10 directories in $HOME and another 85 dotfiles/dirs there at the moment.

New ubuntu versions start you out with capitalized folder names which is annoying.

NetworkManager often bugs out. displaying in a tiny one line box you have to scroll through or disabling wifi when i attempt to start a VPN connection. I cant be bothered to learn wicd though

No gripes since Linux is by far the best development environment for most technologies. I am running Ubuntu desktop(Gnome) vms inside my macbook pro and macbook mini but going to install Ubuntu on metal itself. I like apple hardware not much their OS(especially for development). Use quite a handful of Ubuntu server edition without GUI for development and testing too. CLI can be as ease for development but with right tools and config.

Tools: vim/nano, curl, grep, rsync, find, mitmproxy, autossh, tar, syslog, seige, top, wget, netstat, lsof, sed, df, du, ifconfig, iptables -L, ping, dig, traceroute, strace, screen, tcpdump, telnet, history

Dev setup config: pathogen.vim, ssh custom host config, ssh keyless entry, ssh tunnel, .bashrc/.bash_profile, alias, /etc/init.d/, .gitignore, vurtualenv(python), vagrant, docker, bash script for automation, supervisord

As a desktop user - I am a big fan of Gnome but just don't see GTK going anywhere. My bias towards Gnome is due to it's design principle. Wish for a Qt Webkit like layer on top of Gnome for native application development. For some reason KDE seems cluttered to me but to their advantage they have Qt.

I prefer developing with Linux. There are generally more tools available than Mac and Windows. Some of the ones I use are xmonad, tmux, vim (nvim), ag, ycm, clang, gcc, gdb, cmake, make, ninja, perf, valgrind, strace, etc... Compared to Windows, even just having a decent shell with coreutils is huge. If there is something that a tool doesn't already do, I can generally combine other ones to do it. For example, sed can handle basic refactoring. It's also generally easier to install new tools through the package manager (I use Funtoo).

I know a lot of people tend to prefer cleanly polished IDEs, and I do use eclipse and eclim for java development, but normally IDEs tend to get in the way for me. As for the specific questions, building definitely isn't an issue and there are plenty of cross-platform build systems when it's needed. Continuous integration is usually handled separately on a build server (hudson, jenkins, team city, etc...). In fact, a lot of the collaborative tools for things like continuous integration and issue tracking are mostly usable via web applications (bugzilla, jira, etc...).

My biggest frustration is when tools that aren't usable on Linux get standardized on. Outlook is the easiest example, but for anything where it's absolutely necessary it's extremely easy to run a virtual machine with kvm and libvirt.

Some of those exact tools you mentioned might not exist on Windows, but comparable tools absolutely do exist. You might even have to pay for them, but I bet in those cases, you at least get a nice UI as compared to none.
There are some similar tools on Windows (e.g. Sysinternals). UIs generally aren't scriptable, which is a serious limitation for me.
The fact that UIs aren't generally scriptable doesn't mean that the dev tools I'm referring to aren't scriptable or otherwise able to be automated.

There are a lot of trade-offs that I think Unix-centric devs don't realize, for the simple fact that they don't venture outside of their own ecosystem for various reasons. One of those trade-offs in my opinion is a certain lack of polish that seems to pervade the Unix-dev-tools landscape. There are thousands of instances of this, but one that I recently encountered was that Vim just can't do code folding very well. You can make it fold on syntax or on markers, but not both. AutoFold tries to remedy this, but as you add plugins to make Vim do things that Visual Studio does well, performance goes down.

Another things that annoys me when I'm working on nix systems is that I feel like I always have to cobble together my kit before I can begin any real work. I'll take a well thought out, professional dev-kit from a big name company any day over a disparate set of single-purpose bins and libs that I have to string together.

The difference for me is largely flexibility. Windows tools tend to be monolithic, which is okay for certain things, but it's generally difficult to extend. As a developer, modularity is important to me. Even GCC I can't use to build any development tools since it's monolithic. LLVM is extremely modular though and even provides an intuitive API to interface with the AST, which makes building any new tools simpler (ycm is based on it).

I disagree on the well thought out IDE. A lot of people I know are more productive with them, but the functionality tends to actually slow me down. The interfaces are generally point and click oriented, which I prefer to avoid. Another issue is that non-typical functionality tends to be hidden behind deep, unintuitive menus. Doing simple things often means digging through documentation, searching the web, or even manually digging through menus which wastes a lot of time for me. For example, building a static LUT with 255 entries. With vim (nvim), all I need to do is...

qqILUT[<c-r>=i<cr>] = y;<cr><esc>:let i+=1<cr>q254@q.

I'd be skeptical there's a way to do that in an IDE.

I personally haven't had any issues using syntax based or explicit code folding in vim (nvim), but it's rare that I actually need it. Normally I can navigate by searching, code reference, generated documentation, or a code search and cross-reference tool though.

I think the scripting example is a little contrived, but yes that is someting you'd need a plugin for in most IDEs. There are certainly features of IDEs that vim doesn't provide out of the box too. Personally I just use SQL for generating sets.
Are you having issues with speed? You can't accelerate Scons or most other Make tools, and CI is still slow when running thousands of tests.
No. In most scenarios, make can parallelize builds and where compiling and re-compiling are still bottlenecks distcc and ccache generally scale. LLVM also tends to compile faster. For larger projects, cmake can also theoretically generate a configuration for ninja (faster than make) only changing the command line.

As for testing, I haven't really seen bottlenecks with integration and unit tests. If anything, running continuous integration on Linux should be as fast or faster though. I tend to use googletest where I can.

1. Fragmentation. Getting something as simple as a bluetooth speaker is a challenge depending on which distro you are on.

2. Package management. Again, a package may be available under vastly different names or config depending on what your distro overlords decided

3. Second class Citizens. Games and software that I want to use is very often never available for Linux. Companies that used to develop are dropping it (ynab). Indie game devs are picking it up, but companies like GitHub are still to even commit to a linux client. Google Drive for Linux was announced more than 3 years back to be under development, but is still unreleased.

I still love Linux, and refuse to switch to Mac (despite almost everyone around me doing so). This is mostly because I love how easy and straightforward it is to develop in Linux.

My biggest frustration with Linux development is how poor it has made windows development env look in comparison. Every time I have to fire up a windows VM to do some work for some of our clients that still use MS tech I hate it. Before using Linux as a dev environment I honestly thought windows and the associated dev tools were really good. Now using anything else seems like a huge chore.