Warning: this is a 4,700-word review, so read when you have something to drink and some time. I tried to break it up into two posts, but I didn’t find a good place.
Update: April, 2015: I have written an updated post after more than 1 year’s daily use. I recommend reading it after this initial review.
I have been running Debian-based distributions of Linux for the last 8 years, but I’ve decided to try Arch for a new laptop to replace my 2008 Thinkpad. I bought:
Lenovo Yoga 2 Pro: Intel Haswell 1.6/2.6 GHz, 8 GB RAM, 256 GB SSD, 13.3” QHD+ 3200×1800. I bought it for a special launch price of $1200, my model is now $1400.
I was running a 5-year-old laptop because it still worked well other than the old CFL bulb which was very dim. Lenovo was also not adding much value in their newer models, and was even taking it away. For example, one of the great things about Lenovo is that it was user-serviceable, but this is becoming less true.
They are also producing an unending stream of indistinguishable models of laptops, (143 at last count, compared to Apple who offers 5 MacBook Pros, and 4 MacBook Airs), while making fewer that are user-customizable. Nike can make a fully custom shoe, whereas Lenovo appears to be heading in the other direction.
It has been interesting researching a HiDPI laptop. They are still hard to come by. Half of the models offered on the Dell and Lenovo websites are 1366×768. Mostly the rest are 980p or top out at 1080p. Compare that to the Nexus 5, which runs 1080p on a 5″ screen.
Most pictures on the web are made for 96dpi screens so the only thing you can do is scale it up and they don’t look better. The only noticeable graphical improvement is with wallpapers. I searched on Google for some nice ones such as this picture of a Maserati that actually looks like it’s in my computer. (Here are a couple Arch wallpapers.) In the end, I’ll be happy with this machine because the 5.7 million pixels make reading text like looking at a color laser printer.
The most controversial thing Lenovo did since 2008 was change the layout of their keyboards. It was apparently done by people who hadn’t used their previous model. They didn’t show a lot of respect towards the designs they inherited, nor to their customers whose fingers have been trained for years on them. One simple example is how they’ve swapped the left Fn and Ctrl keys. There is no possible benefit from that. The Linux kernel has a policy: “don’t break userspace”. Keyboards are one of the places in computing where backward compatibility is important.
Of course on smaller machines compromises must be made, but Lenovo used to put great keyboards into even their 13” machines. This laptop has almost an inch of empty space on the left and right edges of the typing area. If they had better used it, they could have built a more compatible layout. The chiclet keys work fine, but the idea of talking about an “efficient layout” for a keyboard means that inmates are running Lenovo.
So in addition to the muscle-memory re-learning required for the new keyboard, Lenovo (and others) are in the process of removing the mouse buttons. I worry we are heading towards the world of Idiocracy. If I wanted to re-learn the keyboard and mouse in an unmaintainable machine, I’d have bought a Mac. I almost expect them to next copy the Macbook Wheel:
Fortunately, they’ve got a compromise for now with the one-button ClickPad. Apparently it will still have mechanical wear issues so I’m not sure if it is actually an improvement.
By default, the left and right bottom areas are reserved for virtual mouse buttons. With a Clickpad, it can sense where the fingers are, and can guess whether the user meant a left-click or right click:
It would cause confusion for the software if you had fingers in both the left and right areas, but for me at least, I never did that. The problem arises because the button areas are now live and sending touch and movements signals, which can completely confuse the software.
It is possible to live with a Clickpad, but it requires smarter drivers. The laptop shipped with a Windows driver written by Synaptics that worked fine. It was overkill with some of the extra gesture features they provided, but it was customizable and not flakey.
Whereas on Linux, out of the box, the driver is almost unusable. I will talk more about the problems in the kernel section below. There is a free Synaptics Linux driver out there, but it isn’t built with any help from Synaptics the Corporation. It supports gestures, but it has a number of bugs. Synaptics has apparently written a proprietary driver, but you can’t download it unless you are an OEM and make laptops! Since no one uses it, it is probably buggy. Synaptics is perfectly happy to write drivers that don’t actually get into their customers hands. The issue of proprietary drivers on Linux is still a problem for video cards and a few other places, but in general most hardware companies realize it is inefficient and buggy to write closed drivers
(UPDATE: I’ve created a petition to Synaptics Corporation about Linux drivers. Please sign it!)
CPU / GPU
The new CPU is a bit faster, but because of its smaller size (45nm versus 22nm) it uses less energy. My old “Penryn”-class Intel 2.5 GHz dual-core CPU required 35 watts while the newer uses 15. The Yoga is hyper-threaded and runs at 900 MHz to 2.6 GHz, depending on load. Note that Windows thought it was a 2.3 GHz processor so there is a question as to whether these computers have been given an unintentional lobotomy by a bug in Microsoft’s code. The machine feels a lot faster mostly because of the SSD.
The Intel 4400 graphics card is much better than the GMA 965 I had in my old laptop. 2-D performance is plenty fast, even with the 4x more than 1600×900 pixels to move. It will run free little games like SuperTuxKart with 60 fps, but Second Life was unplayable at 2 fps.
The speed of an SSD is great. I am getting 500MB / sec reads whereas I would get about 50 MB / sec on my old 7,200 rpm drive. I was not usually waiting on the computer, but when re-booting, starting big apps like Firefox / LibreOffice, etc. I was sometimes I/O bound, so it is nice that this is gone. With an SSD, the computer is snappy.
I was paranoid about reliability, but it depends on factors such as the size of the silicon, the size of the drive, how many bits per cell, usage patterns, etc. My 22nm MLC drive should get 3,000 write cycles.
The typical use is when I’m working on a 1MB document. I’ve adjusted LibreOffice’s autosave to be every 30 minutes, which should be fine because it never crashes for me. With wear-leveling across a 256 Gig SSD and 3000 write cycles, I could write that file 768 million times. Given that I might write 20 revisions per day the drive should last 105,000 years.
The next biggest write-heavy app for me is Firefox which out of the box was poorly optimized for SSD drives. It usually wrote about 4 megabytes per click, and on one page wrote 70 MB! The following are the fixes I applied:
1. Go to about:config and set browser.cache.disk.enable to false. I also adjusted the cache size to be 50 MB so as to not let Firefox fill up memory with web pages I don’t typically go back to.
2. I next turned off thumbnail generation which was writing about 300KB per click. Sometimes it even generated two! It seems Firefox should only generate a thumbnail when it decided it actually needed it for the start screen, but this silliness can be worked around. Even worse, after turning off the cache and the thumbnails, I was still getting a couple of MB of writes / click.
3. So finally, I installed a tool called profile-sync-daemon, which sets a link to point your Mozilla profile to the /tmp directory which is actually just RAM. It lets Mozilla write as much junk as it wants with no wear to the drive. Every hour, it will do an update via Rsync, which does an incremental update of only the bits that changed. With those 3 fixes, Firefox performs well.
When adding in system maintenance, media, etc. I should write about 200 MB / day. With that, the drive should last 10,500 years.
More good news is that SSDs are quite smart about fixing problems transparently. It has reserve blocks, and when it detects a problematic cell, it moves the data over to a spare and keeps going. Of course, when one cell goes, because of wear-leveling, it means all the other cells are also old and the drive should be replaced. One big difference between SSDs and HDDs is that old flash cells can lose their data entirely if turned off for days, so backups are still valuable.
Linux has a utility called smartctl which can run diagnostics, and tell you information from the controller such as the number of times the cells have been erased, how many spare cells are in use, etc. This way you can monitor it. I’m sure there is some GUI for Windows, but I prefer a text-mode app anyway.
Part II: Arch
Now to the OS: I decided to try Arch because there while there are many good desktop distros, I wanted to try a rolling one that updates nearly all of its packages within a day of the component shipping a new version. Describing why not all the other distros is hard so I will just mention why I decided against Debian Unstable which is also rolling. (I wrote a separate article about why not Manjaro you can read here.) Debian used to have a reputation of reliable staleware, but this is less true:
Current Package Version
Debian Unstable Version
Debian is generally close to upstreams, but there are still some problem areas: their integration of Gnome is 6 months behind. It is an interesting question why Debian, which is a bigger and older team than Arch, can’t keep up. The good news is that Debian is generally on a good trend with more people joining:
Debian is doing better than it used to, but Arch is close to perfect in regards to keeping up with the thousands of Linux applications.
Another downside of running Debian’s rolling release is that the official goal is to make the next stable version, so there isn’t the social culture that exists in Arch where everyone is depending on the build to always work.
I found lots of bugs while running Arch, but none that exist in their code, only in the kernel and the other applications they integrate. The faster I can get the latest code, the faster I can have a better Linux experience.
Arch’s primary assets are build / install scripts (here is the one for LibreOffice) and a wiki. The wiki is superb. I never considered to use the non-existent one for Mint. When I ran Ubuntu, it sort of did everything for me such that I never needed to read up on anything. I followed Arch’s Unofficial Beginner’s Guide, and after that spent some hours reading various articles about how to use and enable fancier features in the software. Using the command line is necessary for Arch, but the set of utilities required is not very large, and you can learn as you go. The wiki and the community assume people are comfortable with the shell which is good because it also keeps the instructions simple and fast. Some people with little familiarity of computers sneak through because the wiki docs are so good that any literate person can run Arch.
One of my big decisions was to just forget about the UEFI support, which makes installing Linux twice as complicated. Lenovo doesn’t seem to offer any other OS for purchase on their laptops, but fortunately their BIOS still has the ability to boot in “Legacy” mode, which allowed me to ignore all the stuff I don’t care about.
In order to switch back to the old (MBR) partition table, I had to wipe my hard drive and couldn’t dual-boot into Windows 8.1 again. But after spending a few hours with it, I decided it wasn’t worth the 40 gigs of space. Linux on the desktop still seems far away, but there are lots of coders out there so it is useful and empowering and interesting to watch. My install is currently using only 4 gigabytes, so it seems a waste to reserve 10x the space on something bloated and inferior.
Legacy BIOS boot mode worked fine and I set things up the way I was used to with two partitions: a 30-gig root partition for the OS and applications, and the rest for “/home”.
I couldn’t just copy over the entire home directory from my old machine. I tried, but Gnome 3.10 got completely confused with missing icons, ugly widgets, etc. So I started fresh and copied things over selectively.
The install process was straightforward but a little tricky. I needed to run:
# rfkill unblock wifi
on every boot to get the network card to function. And when I run that command, wireless doesn’t wake up and start working, so I need to use:
# wifi-menu wlp1s0
Another tricky issue was that when I setup the machine, I didn’t know to have the package manager install the rfkill command. Rfkill comes on the Arch installer, but it didn’t actually install it by default on the drive. And so when I booted into (text mode) for the first time, I couldn’t connect to the network to get the GUI and the rest of the packages I needed.
And so I went back to the USB install stick. I had to follow the instructions from the top, but I was able to skip many of the steps such as the need to actually copy over all the bits. When I got near the end, I installed the package:
# pacman -S rfkill
and then I was ready to reboot into the OS, connect to the net and install everything else.
Another little issue I ran into is that on most operating systems, when you install Gnome, you also install the GDM, but on Arch, this isn’t necessary, nor does it prompt you. I needed to run:
# systemctl enable gdm.service
Fortunately, that line was at the top of the Gdm wiki page, so it didn’t take me long to fix my problem. I’ve had to fiddle a bit with systemd while using Arch, and it seems to be a simple and reliable way to manage low-level aspects of OS.
I like how the software in Arch is so granular. Gnome is broken up into two meta-packages, an essential one, and a collection of extras. I installed the main one, and some of the extras.
With LibreOffice, I installedWriter, Calc, Impress, and the English proofing tools. Before I used to blindly download and install all the DEBs on every release, but with Arch I took the time, and only installed the pieces I care about. Only they will be selectively downloaded and updated every few months as new versions come out.
Eventually, I did decide to fully re-install the OS. The first time, I put the 32-bit version on but I discovered later that there is a kernel 3.11 bug (https://bugzilla.kernel.org/show_bug.cgi?id=61781) where the machine won’t resume from suspend properly. I saw it on a 2008 Lenovo, and 2013 Lenovo, so it was probably a regression for a large number of computers.
The subsystem maintainer has since stepped in and reverted the patch because the underlying maintainer hasn’t had time to find a proper fix. (Presumably the change was made for a reason.) Resume was only broken on x86 so switching to 64-bit Linux worked around that problem.
Also, the Arch kernel doesn’t enable PAE in their builds, unlike most other distros, so it could only see 4 gigabytes of memory. My old laptop had 2 gigabytes, which was typically more than enough, but I decided that the extra memory could be useful as a RAM drive. There are PAE builds in Arch’s user repository, but they are not widely used or supported, so switching to x86-64 solved that problem as well. I’m guessing a number of kernel developers are running 64-bit nowadays because otherwise the resume bug would have gotten fixed a lot faster, so perhaps 64-bit is more reliable.
I generally ran into 2 classes of problems, hardware bugs and HiDPI issues:
1. The screen’s backlight doesn’t work unless I put “acpi_backlight=vendor” into the kernel command line. Fixing this issue involves changing the GRUB bootloader configuration, but the wiki was clear and explained how it could be done. As a side-effect of this fix, the laptop buttons to adjust the brightness no longer work but I decided the tradeoff was worth it. I can do:
# echo 850 > /sys/class/backlight/intel_backlight/brightness
to tell the LEDs to back off a bit, but I don’t mind full brightness. I should get about 5 hours on a full charge, which is more than enough for my typical uses.
2. As I mentioned in the install, I need to unblock my wifi card to get wireless working.
3. The Synaptics Clickpad is almost unusable. In fact, for a while I was sorry I didn’t keep Windows around because a mouse on crack can prevent you from being able to focus on your work. The Synaptics driver built by the community is quite rich, but it is a pain to use:
- By default, the mouse button areas of the Clickpad were live. I almost always move my finger a bit while pressing down,which meant that it would usually click next to the choice I wanted, but not the one I actually wanted. There is a fix for that that can be put into the xorg.conf file which tells the driver to ignore any movement in the bottom portion of the trackpad, but it took me hours to discover and isn’t enabled by default.
- There is a driver bug because of the above feature where if I have my left finger resting in the click-only area, then any cursor movements with my right finger don’t register. It would be nice if this were fixed because ClickPads are quite common now, but in the meanwhile, I can workaround it. Click and still drag works, because when you click the mouse, the pointer starts registering in the live area again, but it is a pain.
- The mouse pointer jumps around randomly while using it.
- The Gnome option to disable the mouse while typing doesn’t seem to work, so my mouse wanders around a lot. The edge of the trackpad is just 1 cm from the space bar and it is so wide that you are forced to rest your hand on it a bit while typing. On my old Thinkpad, the trackpad was thinner, recessed, and far enough away from the keyboard that it wasn’t much of a problem. Again, this requires smarter software to detect your palm. Fortunately, as light touching doesn’t register any mouse clicks, so the movement is a bit distracting, but not disruptive.
4. The system still doesn’t always work when coming out of resume. Things work better on the x86-64 bit builds, but the mouse pointer and wireless doesn’t always work and so I need to reboot sometimes.
5. The driver leaves artifacts with the Intel driver under SNA mode:
6. The cpupower comand never shows the processor getting down to the minimal 800MHz to save heat and power even with the Intel Powersave governor which is supposed to be able to do that.
7. My logfile fills up with USB (and other) error messages.
usb 2-7: unable to read config index 0 descriptor/start -71
8. Even though I mount my hard drive with the “discard” option for SSDs, if I run fstrim after a reboot, it shows me this:
# fstrim -v /
/: 26.2 GiB (28103872512 bytes) trimmed
# fstrim -v /home
/home: 204.8 GiB (219841617920 bytes) trimmed
9. There is an option to disable hyperthreading by booting the kernel with maxcpus = 2, but it appears to also disable the ability to adjust the CPU frequency.
In general it is beautiful, but I ran into several problems.
1. Sometimes Gnome uses big cursors and sometimes it reverts to old habits of small ones:
2. Some parts of the UI use bigger fonts, but don’t increase the window size to make room for the bigger text:
3. Some windows have big close buttons and controls, and some have small ones. The scrollbar in all applications is too narrow to easily grab. You need the steady hands of a sober heart surgeon to use the UI.
5. Many apps like LibreOffice, Gimp and Audacity have toolbar buttons that are too small to easily click and even recognize. LibreOffice’s dialog boxes and text everywhere look fine, even pretty, it is just the buttons that are not scaling. Even using LibreOffice’s large icons setting doesn’t make them big enough. Interestingly, Apache OpenOffice seems to do a better job as it sets the toolbar button based on the size of the system font. All apps should do that.
6. Cinnamon and Xfce cannot detect that the screen is high-resolution and so need lots of tweaking to become usable.
7. Firefox needs the No-Squint plugin to make the websites display in a reasonable size. Apparently nothing has been done in the product to officially notice the dpi of the screen, but at least there is an easy workaround. There are still some problems such as the tiny buttons on the Youtube player but it is manageable.
Fortunately, as laptops with high resolution screens become more popular, these bugs will get noticed. There is a lot to be done. I’m surprised that Gnome has so many issues as their 3.10 release announcement makes it seem like they had fixed them, and I don’t see any mention of further work.
I did try Windows 8.1 for a few hours and it had mixed results with regards to handling such a high-resolution screen so I’m not necessarily any worse off with Linux. Teams in the free software community release code 2-4 times per year, so I’m sure it will get smarter relatively soon.
The good news is that Gnome’s Classic mode is almost good enough for someone who was happy in Gnome 2 but there are still various annoyances: most people in Gnome 2 used the left and right arrows to scroll through their workspaces, but in Gnome Classic, you have to use up and down.
I may try Ubuntu’s Unity GUI, as there are builds for Arch, but Unity requires patches to so many upstream components that I may not want to risk it. I’m surviving with Gnome Classic plus some extensions, and I’ll be able to use this machine full-time. So, in spite of all these problems, I don’t think any are Arch’s bugs. The state of Arch is really the state of the Linux desktop. I’m surprised it isn’t in the top-5 most popular distributions on Distrowatch.
Linux on the desktop
It seems not one person at Lenovo installed Linux on this new Yoga before they released it. There are a number of bugs they could easily have fixed. The average patch to the kernel is about 20 lines of code. Unlike with Windows, they can make fixes anywhere they find problems. They also don’t need to build a multi-lingual installer to distribute drivers, they just improve the actual code, and let the other parts of the community distribute it and provide the UI.
If they had put in the same amount of effort towards Linux that they put into their fluff Windows UI nagware, it would be more than enough to make sure the Linux desktop worked well out of the box. There are even Lenovo-specific modules in the kernel that they aren’t contributing to. Other hackers are expected to figure out how to make every new model work by reverse-engineering.
I see lots of Linux users using Lenovo hardware, but because they don’t offer it, they have no idea how many users are running it, or would be happier if it came pre-installed. Lenovo has 33,000 employees and Dell has 100K. They could easily enable a great out of box experience with a relatively small team. If I ran Lenovo, everyone would be required to dual boot. It would be nice if they saw the trends in computing on cell-phones to servers and realize that they should be a part of a better future.
They could also customize it more nicely and more cheaply rather than building a bunch of junk outside and on top of Windows. The community would even help them. When I first started using Linux in 2005, I thought that Linux on the desktop would soon happen, but even in 2013, things haven’t improved much. I guess we Linux users need to complain more loudly to the employees of the laptop manufacturers.
The good news is that at least on the hardware side, the kernel has thousands of people, and so they in theory have the resources to fix these issues quickly. I’m looking into filing bugs, but there are already 25 active against the Synaptics driver alone so I’d need to do research and make sure I’m not filing duplicates.
One challenge for the kernel is they sometimes let bugs languish in their database for years. It was recently Halloween, so check out these 400+ scary bugs marked as regressions: http://bit.ly/LinuxRegressions. The Linux kernel currently has 2,194 bugs: http://bit.ly/LinuxBugs. Even scarier, a messy and unprioritized buglist discourages people from even entering bugs.
Linus and the other top maintainers see their job as making sure the hordes of programmers don’t screw things up, and that is a big key to its success. It requires a lot of work to watch over the massive rate of change. The problem is that the team mostly focus on evaluating the stream of patches going in that they sort of ignore users. The Linux kernel has a policy of no regressions, but there is no enforcement.
One of important things I learned at Microsoft was to try to get down to zero bugs as best as you can. An early internal memo recommended developers stop adding new features when they had 10 or more assigned to them. Some people might laugh at the idea that Microsoft tried to write reliable software, but the poor results are because they have richer but more complicated and older codebases. Peter Drucker had a line: “What’s measured improves.” If you never looked at yourself in the mirror, or weighed yourself, you might get heavier than you realized. Linux runs on millions of machines, but there are billions of them.
Another issue is that the kernel dev community is not equally well-staffed in every part of the codebase. There are a lot of ARM contributors, but they can’t fix the random laptop issues. In a few cases, it seems like the hardware will be phased out before it works with Linux. The benefit of a bug list is that it helps you find the areas that need extra brainpower.
In many teams in the free software stack, people are working on their bugs as fast as they can. Groups that have 1000s of active bugs like LibreOffice are simply understaffed and need more money and people. In the case of the kernel, it is partially an uneven resource problem, but also a cultural issue.
The worst part about the current large active bug count is that it is the fans of Linux on the desktop who are getting hurt. There is a world of people out there who are inspired by Linux but can’t make kernel patches. Everyone who files a bug in the kernel appreciates this amazing thing that has been built. They would like it to be used everywhere, including on their computer.
In spite of the problems, I’m happy in Linux. With applications of every kind, it changes how you think about an OS. If I ran Windows, I’d still be using Firefox, LibreOffice, Audacity, VLC, Gimp, Python, Git, Tomboy, and other free software. Windows succeeds because of laziness and inertia. There are some applications that don’t run on Linux: games, Ableton, Solidworks, iTunes, etc. but for most most today it is better code. Looking forward to the next few years of Linux on my laptop.
Note: I’ve created a petition to Synaptics Corporation about Linux drivers. Please sign it!