Ask HN: What are your biggest frustrations with Linux development?
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 ] threadI 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.
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.
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.
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...
http://blog.lenovo.com/en/blog/retro-thinkpad-time-machine/
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.
* Hardware vendors not showing much 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.
I would love to see an editor which clones acme, but follows a few of the modern ui conventions.
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.
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.
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).
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.
It also has an address sanitizer that checks for out of bounds errors. I have found both to be enormously useful.
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.
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.
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.)
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 :)
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.
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.
- 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.
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).
But I agree on the annoying omissions. I hate no dedicated insert, although shift + backspace works well.
#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.
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 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.
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 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.
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.
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
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 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.
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.
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.
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.
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.