Blog

Equating an IP to an infringer can be a pretty bad idea for rights holders

Have you heard of the nine-year-old whose Winnie the Pooh laptop was confiscated during a police home invasion related to copyright infringement for downloading a single album? TorrentFreak has some very interesting commentary about the subject.  Apparently, a girl downloaded a single music album (and the download wasn’t even playable, it was broken or corrupted) and when the father refused to cough up a $600 “settlement fee” to a copyright authority, they had the police bust in and search the place, resulting in the confiscation of the young child’s laptop. The evidence was an IP address.

That’s right. An IP address was the evidence that the home invasion was based on.

Oh, sure, you could say that they got the subscriber information for who was leased the IP address, but the premise under which it was retrieved was that “IP address xxx.yyy.zzz.qqq is committing copyright infringement!” The lesson here is clearly to never live in Finland, since that’s all that is apparently required for a corporation to get the local cops to bust your door down and search your residence. The problem for the police and the copyright cops is that they didn’t end up targeting some tax-paying adult citizen off of that IP address “evidence,” they unknowingly went after a nine-year-old girl and took her laptop away.

You should read the TorrentFreak post for more information. It’s pretty interesting to think about. I’ve already mused on the reasons why accurately resolving an IP address to an infringer is nearly impossible, and this is one more real-world nail in that coffin. The interesting part for me is that the download in question wasn’t even functional; when the father found out the daughter was trying to download the music, he went out and bought the album in question for her. Even despite that, they still invaded the house and caused all that trauma and stole the laptop from the little girl. What a crock of you-know-what.

Thoughts on why it’s impossible to prove infringement by downloaders

Final Update

I have canceled the copyright-infringement-notice.com domain name and archived the text elsewhere on this blog. All of this content was written in 2012 and hasn’t been updated in years. I am keeping the post you’re currently reading for historical and entertainment purposes. If you follow any outdated advice or information given below, you do so entirely at your own risk. I am not a lawyer and only a fool would take anything I write as legal advice.


UPDATE: I’m working out the details of a next-gen P2P file sharing program that should fix up most of the problems with P2P file sharing today, including the IP address targeting issue that spawned this article in the first place. I also found an Ars Technica article on why IP addresses aren’t enough to find file swappers.

COMMENTS ARE WELCOME AND ENCOURAGED.

I have always wondered how it is possible to prove in a copyright infringement case that peer-to-peer file sharers and Internet file locker downloaders are individually responsible for what they’re accused of, short of a confession by the person being targeted. I thought that it’s about time to place my logic here. Feel free to post comments poking holes in this logic. (Comments are moderated, by the way…people seem to wonder why they don’t appear immediately, so please don’t double post.)

An IP address is not a computer, and a computer is not a person. You ultimately must sue a person; not a computer, and not an IP address. That’s obvious.

Putting a person behind a keyboard through evidence is nearly impossible. Let’s use an analogy where instead of proving that infringement has occurred, we’ll discuss proving that I posted this article. How can you prove that I am at my computer right now, posting to this blog? You almost certainly can’t. You know it’s being posted, sure, but the challenges that can be mounted against proving the identity of the poster are quite intimidating:

  • How do you know which of my devices I’m supposedly using? You might say “by the IP address it’s posted from” but if it was posted from the static IP of my business, it could mean that someone in my business gained access to my account, or that someone broke in and used my already-logged-in account on an unlocked computer, or any number of other possibilities.
  • Even if you can point to a device, how do you know that I was in control of the device at the time that the post was uploaded from it?
  • Assume you can prove that I was using a device exclusively at the time of posting and that the post came from that exact device. How do you know that malicious software didn’t do it? How do you prove that I took the actions at the keyboard that posted the content, and not something else that might have been on my computer?
  • Assume you proved all of the above, plus in a forensic examination of the hard drive of my system, you could find no evidence that malicious software of any type was present. It’s just as possible that an infection was present in RAM that does not write itself to the hard drive (thus only working until system shutdown). The instant I shut off the computer and provide it to your computer forensic investigator to comply with your discovery subpoena, it would be wiped out, leaving no trace. This isn’t necessarily likely since most malicious software authors want it to persist across reboots, but it is very possible and such an infection would be nearly impossible to make antivirus signatures for or analyze due to the fact that all traces of it are lost at reboot or power down. (There are possible ways to catch it, but they’re very difficult and likely also beyond the skill sets of most casual computer programmers, including myself.)

Keep in mind, all of this isn’t proving that I posted this blog post. This (except the point about infection that’s only in RAM, to some extent) is the process of proving that I was merely capable of doing so. It’s the digital equivalent of proving that someone had a gun in their hand while proving that a murder was perpetrated by that person: the tool is present, but they still have to aim and pull the trigger. How can you prove (once you somehow manage to meet the burden of proving everything above) that a person pulled the trigger and downloaded a copyrighted file? I can only think of one way: show that the computer in question actually downloaded the file over the Internet. The only way that this can be possible is through ISPs logging all packets in and out of your computer or through the copyright holder uploading the file to you. In the latter case, you’d have a solid argument that they gave you permission by offering the file up in the first place, which is almost certainly why no copyright trolls can show traffic logs of this nature. ISPs cannot possibly archive every packet that travels across the Internet (imagine trying to archive everything that flies over a 10 gigabit network connection; unless you have a storage device that can store a gigabyte per second and has millions of gigabytes free, it isn’t happening.)

I just don’t see how anyone proves definitively that someone was responsible for something over the Internet without the targeted person spilling too much information. What do you think?

[Added 2012-12-11] In the case of the majority of file sharing software, files are distributed in pieces that are significantly smaller than the total size of the file. Even if you can prove that someone joined a network and started swapping partial pieces of a file back and forth with absolute certainty (which we have established is extremely unlikely if going by an IP address alone), arguments can be made regarding this distribution method that weaken the case of someone attempting to prosecute:

  • Pieces of a file are almost universally useless on their own: The pieces of a file that are shared are generally of very limited use on their own; in the vast majority of cases, without the first piece of a file containing header information that lays out the format specifications of the file, pieces are often completely useless and might as well be random noise. One could argue that having an unusable collection of pieces of the file cannot be considered infringement, because (depending on the file format) missing the header data, the end-of-file data, and/or intermediate data required to connect pieces is sufficient to make it impossible for the computer to reproduce a copyrighted work or a portion thereof from the incomplete file. Video streams in particular encode “key frames” every few seconds, and between those key frames, the only data is what has changed between each successive frame; thus, damage or missing data for a single frame in a video file will render hundreds of video frames thereafter useless.
  • Did you verify the file data solely from the uploader you’re prosecuting? The architecture of most peer-to-peer file sharing networks is such that downloading a file’s pieces is massively multi-sourced across many users with low upstream bandwidth. It is nearly impossible that any given downloader will acquire the entire file from a single uploader, and particularly in the case of large files such as feature-length DVD movie rips, even if an uploader sends the file at 90 KB/sec (not unusual for a decent DSL package) a typical 702MB (CD-length) DVD rip would require 133 minutes of the uploader sending the data solely to the downloader at full upload speed. Needless to say, a combination of client throttling, possible ISP throttling, multiple uploads at once, and other factors pushes the typical home DSL connection’s contribution to a peer swarm closer to 5-10 KB/sec (based on my own experiments with monitoring individual peer bandwidth while downloading torrents of Linux install DVDs, most peers appear to contribute 10 KB/sec or less at a time.) The chances of obtaining a file from a solitary uploader are very slim, and it could be argued that if the copyright prosecutor didn’t download the entirety of the file data from the targeted uploader exclusively, then they are prosecuting that uploader based on file data from other people. This would be no different than someone giving the rights holder two pieces to a puzzle that shows a pattern of random dots until completely assembled, the holder getting the rest of the pieces from 50 other people, then prosecuting all of the people for offering out the entire infringing puzzle based on the revealed image of the fully assembled puzzle based on their obvious possession of only a fractional piece that is not even viewable without the other pieces. Failure to verify that the person has transmitted a complete, usable copy of the infringing file is not convincing when the individual pieces without all other dependency pieces are effectively random noise.
  • Most peers in a P2P file sharing network don’t even have the entire file in their possession to offer for upload in the first place. If the person in question doesn’t have the entire file, they aren’t in possession of the copyrighted work. For reasons outlined above, a partial file is effectively useless; without verifying that the infringing party is “seeding” (has 100% of file pieces and offers 100% of those pieces as downloadable from them) the prosecuting party cannot truthfully state in a court of law that the target possesses the copyrighted work without committing perjury.

I’m interested in any comments on this subject, or any points that I might have left out.

Solution: Damaged event logs cause Windows to hang, freeze, or lock up.

A customer had a damaged filesystem which prevented booting up all the way and required a disk check before it could boot to the desktop normally. Unfortunately, that was only the start of the trouble. In Windows, programs (including startup programs) would reach a certain point of operation and then freeze (or hang or lock up, whichever term you prefer). The worst part is that Task Manager would not start at all, even though its icon would appear in the notification area (remember when this was called the much more amusing System Tray in Windows 95?) Upon attempting to start Event Viewer to read event logs, the Event viewer would lock up as well. Ultimately, I traced this back to a corrupt event log file.

Here’s how I fixed it:

  1. Stop the Event Log service, either through the Services console inside the Administrative Tools control panel, or by running “net stop eventlog” with elevated privileges (hit CTRL+SHIFT+ENTER instead of just ENTER)
  2. Delete all of the files in C:\Windows\system32\winevt\Logs\
  3. Start the Event Log service with “net start eventlog” or through Services.

This will delete all of the log files, causing them to be rebuilt as new empty files by the Event Log service.

Manually copying a RAID-0 striped array to a single drive for data recovery

This question was posed on a forum:

I have a customer who has a computer, 2 SATA disk (striped in RAID config. Windows won’t load. Diag reports bad hard drive. When I disconnect one, it kills the stripe and the computer appears to not have a hard drive at all. Seems kind of silly to have it set this way as it increases the risk of failure. Other than putting each hard drive in another computer, I’d like to determine which of the disk are bad.

Also, not quite sure how to attack data recovery as they are a stripe set and plugging in to a SATA to USB does not appear to be a valid method. If I put a third hard drive in as a boot drive, do i have to reconfig the stripe set and if i do, will it kill the data.

I have reassembled two RAID-0 “striped” drives to a single larger drive by hand before. It’s actually a programmatically simple operation, but you require a lot of low-level knowledge and some guesswork to do it. The specific pair I had appeared to store the metadata somewhere other than the start of the disk, and I was able to discover through a hex editor that the drive was on a 64KB stripe size. I also spotted which drive had a partition table and which didn’t, because that’s only on the first drive which contains the first stripe.

At a Linux command prompt, with the two RAID-0 disks (that were NOT being detected properly by the Linux LVM2 “FakeRAID” algorithms, by the way) and a disk of twice their size connected, I wrote a very simple script that looked something like this (sda/sdb as RAID-0, sdc as the destination disk, and this might work under ash or similar as well).

—- cut here —-

#/bin/bash

; X=sda position, Y=sdb position, Z=sdc position, STRIPE=stripe size
X=0; Y=0; Z=0; STRIPE=65536

; Retrieve the size of a RAID-0 disk so we can terminate at the end
SIZE=$(cat /proc/partitions | grep ‘sda$’ | awk ‘{print $3}’)
; Divide size by stripe, including any tail blocks (expr truncates)
SIZE=$(( SIZE + STRIPE – 1 ))
SIZE=$(expr $SIZE / $STRIPE ))
while [ “$Z” -lt “$SIZE” ]
do
dd if=/dev/sda of=/dev/sdc seek=$Z; skip=$X bs=$STRIPE count=1
Z=$(( Z + 1 ))
dd if=/dev/sdb of=/dev/sdc seek=$Z; skip=$Y bs=$STRIPE count=1
Z=$(( Z + 1 ))
X=$(( X + 1 ))
Y=$(( Y + 1 ))
done

—- cut here —-

Note that all it does is load 64K at a time from each disk and save it to the third disk in sequential order. This is untested, and requires modification to suit your scenario, and is only being written here as an example. It does not fail if a ‘dd’ command fails, so it will work okay for data recovery; you will lose any stripe that contains a bad block, though, and the algorithm could be improved to use dd_rescue (if you have it) or to copy smaller units in a stripe so that only a partial stripe loss occurs on bad data.

Services (Windows Search, Windows Defender, etc.) failing to start and service-specific errors after upgrading to a larger hard drive on Intel platforms

SCENARIO: You use an Intel-based computing platform with an Intel SATA controller. You move an existing Windows installation or system image to a larger hard drive. After moving to the larger drive, you experience issues with services not starting, and/or Outlook or OneNote complains about Windows [Desktop] Search. You may experience problems with Windows Defender or Windows Update not functioning properly.

SYMPTOMS: Most of the time, this problem will be discovered when starting Outlook or OneNote, in the form of the message “The Microsoft Windows Desktop Search component is not properly installed.” There may also be the following Event IDs in the system event logs:

  • 257: “The Cryptographic Services service failed to initialize the Catalog Database. The ESENT error was: -583”
  • 1006: “The Windows Search Service has failed to create the new search index. Internal error <4, 0x8004117f, Failed to add project: C:\ProgramData\Microsoft\Search\Data\Applications\Windows\Projects>.”
  • 7023: “The Windows Defender service terminated with the following error: -1906441657”
  • 7024 or 7031 or 7034: “The Windows Search service terminated with service-specific error -2147217025.”

SOLUTION: You are running an outdated version of the Intel Matrix Storage Manager and Intel Rapid Storage Technology driver and software, and it is interfering with the functionality of these services. Visit the Intel download center to download and install the latest Intel Rapid Storage Technology software for your operating system.

Please leave a comment with feedback if this is helpful or not helpful!

AlterEgo: an alternative solution to the “multilib” problem on Linux

A classic problem for development of a Linux distribution that supports multiple variants of the same architecture is determining exactly how the two similar but directly incompatible architectures should coexist on the same system. By far the most obvious and well-known example of this is running 32-bit i386/i686 software on a 64-bit x86-64/amd64 Linux system. On these so-called “multilib” systems, the typical solution is to segregate 32-bit libraries into a separate folder such as /lib32 or /usr/lib32, and placing 64-bit libraries in /lib64, /lib, /usr/lib64, or /usr/lib, depending on the implementation. Oddly enough, there is almost never a /usr/bin64 or similar matching separation for programs themselves. This is very troublesome in that there is no fully standardized way to combine everything. Additionally, if you generate a large set of packages for an i686 system, those packages cannot be re-used on the x86-64 system without one of two things happening:

  • The 32-bit software being recompiled to use special paths, or
  • The 64-bit software being compiled with special paths to “work around” the 32-bit ones.

Compiling packages with “special” path names and patches poses a significant problem in itself: every software package builds in a different way, and often assumptions are made about the location of libraries, binaries, and so forth that aren’t compatible with multilib directory layouts. The burden on software developers increases, and maintainers must ensure that their maintained software packages are compatible with their distinct “flavor” of multilib implementation (and patch them if they are not).

AlterEgo provides a third option. Imagine if 32-bit and 64-bit packages could simply be configured as “pure” systems, where library and binary directories only contain software of the correct variant, and no concessions for multilib support are required. This has always been easily done through the use of the “chroot” command, by unpacking the entire incompatible variant into a directory and then changing root into that directory, under which all of the required libraries and files are placed exactly as needed. However, one very important piece of the puzzle has been missing: using chroot requires root access, and integrating 32-bit programs into a 64-bit host system is not nearly as simple as making a symbolic link because chroot is required first. AlterEgo fills in that gap.

With AlterEgo installed, a program in a hard-coded chroot directory can be executed from the incompatible host system exactly the same as if it were installed normally. The trick is to route the program through AlterEgo via a symbolic link. For example, torun 32-bit Firefox on a 64-bit host, with the 32-bit host files unpacked and living in /i386:

ln -s /usr/bin/alterego /usr/bin/firefox
/usr/bin/firefox
(AlterEgo chroots to /i386 and runs /usr/bin/firefox automatically)

Note that while AlterEgo solves the chroot problem, you will still have to bind-mount any folders you wish to share with in the 32-bit system; the classic examples being /home, /var, and /etc; in the system startup scripts, it’s an excellent idea to set these mounts up automatically:

mount --bind /home /i386/home
mount --bind /etc /i386/etc
mount --bind /var /i386/var

Sylvania G skips hard drive if partition 1 is less than 2GB, AKA “20,000 dumb BIOSes under the sea”

I previously posted about a problem with my Sylvania G netbook (original model GNET13001 with a VIA C7-M CPU, not the Meso) that I recently upgraded to a 32GB KingSpec 1.8″ ZIF SSD, where it would boot Windows XP just fine, but a Windows 7 installation on the same hard drive would do something extremely unusual: the system would not only fail to boot Windows 7, but the BIOS would not even load and execute the MBR at all, skipping the hard drive ENTIRELY in the boot order.

I figured this out late last night, powered by coffee, Doritos, and forum posts to distract me periodically. The major difference between XP and Windows 7 is the partitioning and MBR code, and the Windows 7 MBR code boots up Windows XP just fine, leaving partition tables as the most likely culprit. I modified the MBR assembly code to output a message indicating that the MBR was loaded and executed, and then halt the system. This way I would be certain that the MBR was executing at all and wouldn’t wonder if the code was somehow tripping over something that caused it to kick right back out. With a partition spanning the full disk, my message showed up. That was expected; XP worked fine, and the partition table was set up in the same fashion that it was under XP. Then, to test and see if we had some sort of issue relating to the cylinder/head/sector geometry values in the raw partition table data, I tweaked the values in the table to be slightly different, and saw no change. Then, to see if we were dealing with a problem with the starting sector for partition 1 being 2048 under Windows 7 instead of 63 under XP, I gradually bumped the partition entry up; first to 64, then 100, 200, 400, 1000, 2000, 2047, and 2048. None of these partition starting sectors caused the boot process to fail. Then, I started trimming the ending of the partition. From 31.6GB to 15GB, then to 4GB. No change, it still tried to boot.

I changed the ending cylinder from near 1000 all the way down to 100 and it stopped booting. YES!

From there, it was simply some intelligent logical bisection of the numbers: 200 failed, but 400 worked. Since 256 is 2^8 (powers of two being very significant) I tried 250, 255, and 256, which also failed. A greater jump straight to 300 passed, though; it was at that point that I realized I was dancing around another important number in terms of computer memory: 2,097,152 KB (4,194,304 512-byte sectors) which is also a power of 2, and happened to be right between the sector counts of 256 and 300 cylinders (these equations are in C/H/S format, and I’m ignoring the first 2048 or so skipped sectors just to annoy you):

256*255*63 = 4,112,640 sectors
300*255*63 = 4,819,500 sectors

With this new information, I changed over to LBA (sector) entry instead, and made the TOTAL number of sectors in this partition 4,194,303. It failed to boot.

When I set the total number of sectors in the first partition to 4,194,304 sectors (exactly 2GB), the Sylvania G loaded and executed the MBR normally, where just one sector less would cause the entire hard drive to be skipped in the boot order.

This effectively means that a stock Windows 7 can never boot on this system without major trickery. I consider this a very severe and stupid BIOS bug. What I don’t understand is how it is possible that this check even exists in the first place. (Edit 2017-03-12: I realized it could be for skipping a small “utility partition” like older laptops do, but that’s what the partition table ACTIVE flag is used for already.) The computer would have to read the MBR from the hard drive into memory and intentionally check the first partition’s size for a minimum amount to make this bug happen, so someone either at VIA, Phoenix (it’s a Phoenix BIOS), or Sylvania (Digital Gadgets, Inc.) had to go out of their way to put this bug into place. Worse yet, there are absolutely no BIOS updates in existence for the Sylvania G, and never will be, so this bug is permanent. Fortunately, if your first partition is larger than 2GB in size, you can blissfully ignore this problem, which means that Linux installations using a compatible partitioning scheme, Windows XP, and Windows Vista all should run on the Sylvania G without hitting this problem at all. Windows 7 is effectively not an option, though. In the next few days, I plan to attempt to overcome this bug and get Windows 7 working on the Sylvania G anyway, as a personal challenge if nothing else.

I am left to ponder what other systems might be having this same issue. The BIOS has no business whatsoever attempting to “verify” my partition table of choice, in my opinion, and I want to know at what point and for what purpose this bug/misfeature was introduced. If anyone has a system that seems to skip the hard drive in the boot order with Windows 7, when Windows Vista or especially Windows XP would work just fine, please leave a comment below with your experiences and insights. I’d love to engage in a discussion with anyone else who feels they may have hit this type of bug.

UPDATE: I have verified that the problem boils down to one single check against the LBA “number of sectors” in partition 1 on the drive being equal to 0x400000 (4194304) or higher, and nothing more. I was able to get Windows 7 to boot normally by copying everything from partition 1 into partition 2, deleting partition 1, then using a hex editor to change byte 0x1CC to 0x40. Since all other parts of partition 1’s table entry are zeroed out, it isn’t seen as a valid partition on the disk, but the BIOS is only checking the DWORD value at 0x1CA-0x1CD to be 0x400000 or greater, so it simultaneously bypasses the bug/misfeature in the BIOS and doesn’t confuse the MBR nor Windows 7 at all, as the partition structure is completely valid. If I was adventurous, I’d shuffle the partition down to sector 2048 and reclaim the missing 100MB, but since I’d lose that space under Windows 7’s out-of-the-box partitioning scheme anyway, and it’s 0.1GB of a 31.6GB SSD, that kind of capacity loss isn’t significant at all.

Since the workaround is as simple as using a dummy entry where partition 1 is supposed to be, this trick should work for any operating system. Just start partitions at number 2 instead of 1, and apply the change 1 with a hex editor when you’re done, and you can have a tiny “first” partition without consequence! The only time you’ll ever need to redo the hack is if you run something that rewrites that portion of the partition table.

1997 Honda Prelude misfire at 1000-2000 RPM? Try this stuff to fix it.

[UPDATE: The problem returned fairly quickly. It turned out that I have a head gasket leak between cylinders 2 and 3 which is also causing coolant to spill into cylinder 3. Compression gauges are cheap, so do a compression test; unplug the two connectors that go to the distributor to disable fuel and ignition for the test. My numbers were 160-120-25-150, and when I put oil in 3 and re-tested, I saw a puff of white smoke begin coming from the plug tube for 2. Clearly a bad head gasket. Fortunately, if I do it myself, it’s about $300 in parts and machine shop work.]

I own a 1997 Honda Prelude. It had a random misfire problem, and to help fellow owners out, I wanted to quickly document what I did to fix the problem. My car needed lots of maintenance, but yours might only need some of these things. For reference, my problems began around 224,000 miles on the odometer.

First thing to try is reseating all the electrical connectors that involve your ignition system. My root misfire cause was a bad connection being made in the two connectors that go to the distributor pickup coil. Simply disconnect and reconnect the connectors and see what changes.

Next, make sure that you have good spark plugs and spark plug ignition wires, as well as a new distributor cap and rotor button. I always use NGK Iridium IX plugs because they last a long time, perform very well, and are not very expensive. The distributor cap has only three screws and the rotor button has one in the shaft, so both are simple to replace and quite cheap. This should be done as part of any tune-up anyway, but if you neglect to take care of all four of these parts, they can make life miserable for you.

If the electrical connectors and tune-up items are okay and you still get misfires, see if there is an oil leak in any of the spark plug tubes. You should notice oil leaking onto spark plugs if you try to take the plugs out, and any oil is an indication that it’s time to replace your valve cover gasket. The part is around $55 but it’s rare that you’ll need to replace it, so even though it’s annoying to get that cover off and do the work, you should knock it out anyway. I was an idiot and seriously over-tightened the nuts, which caused my gasket to compress and leak, so I had to replace mine twice. Valve cover gasket nuts on a Honda Prelude should be snug, and I don’t mean hard snug! As long as the rubber washers fill the holes they came from  completely, and it’s gently snugged down, it should be fine. Don’t blow up a $55 gasket like genius boy me managed to do.

The last things to try if you still have problems is cleaning out the EGR ports and valve. It’s very annoying, but there are excellent guides out there that show the procedure in good detail. This will definitely help a funky idle and boost fuel efficiency, and if you’re past 200K miles, you probably need to do it anyway. The port plugs are sold by Honda, and are the same as the ones used for many Accord models.

I am not a professional mechanic. Please don’t ask me questions about how to fix your car. I am only posting this to help others because I struggled with this for many months, and the root cause ended up being a bad electrical connection that took 20 seconds to fix. If this helps you, please comment on it and/or link to it. Happy wrench turning!

My take on Windows 8, Metro, touchscreens, and other desktop disasters

Windows 8 has this shiny new user interface that’s known as “Metro.” I hate Metro. LOTS of people hate Metro. Metro is supposed to be easier for touchscreen usage, but Windows is a desktop operating system. I don’t want to re-hash everything that other people have written about why Metro is garbage, so I’ll just drop a few points to get my ideas across.

  • Metro is designed specifically with touchscreens in mind. Some all-in-one desktop computers are now touch-capable, and Windows 8 is supposed to become available for ARM architectures so that Windows 8 can be used on new tablets. However, there are two major problems: MOST desktop and laptop computers DO NOT HAVE TOUCH CAPABILITY AT ALL (that’s the vast majority of what it runs on) and TOUCH IS NOT PRACTICAL FOR DESKTOP USE.
  • Touchscreens require holding your arm up to manipulate what we traditionally would use a mouse and pointer to work with. That’s fine for a minute, but if you think your arm is NOT going to get tired ten minutes into touchscreen-centric hell, you’re fooling yourself.
  • Have you seen the Explorer windows? They brought that awful, terrible “ribbon UI” from Office 2010 into Windows 8. Not only is it annoying as hell to use, it’s counterintuitive: with monitors trending towards widescreen displays, vertical screen space is in much shorter supply, while ironically still being the most needed type of screen space for office applications and for seeing more files at once in Explorer’s “details” file view. Yet somehow, Microsoft’s logic is to replace one toolbar with something that’s three toolbars in height. Way to go, you idiots. (If a ribbon popped out of the left or right, it’d make more sense, but ribbon organization is actually less efficient than toolbars, in my opinion.)
  • Start button in desktop mode: GONE. WHY?! The Start button paradigm was revolutionary. There’s a reason that it’s persisted since the introduction of Windows 95, and is often imitated in many Linux desktops: it gets the job done, and does so pretty well, as long as you didn’t have 100 folders inside it (and Vista fixed that with the introduction of a scrolling Start menu programs list that ACTUALLY HAS A FREAKING SCROLL BAR…what took so long to come up with that?!)

If I was to advocate for a radical UI change, I’d want to see something more like Fluxbox on Linux systems. I can right-click anywhere on the “desktop” to get a program menu, with no Start button required. If I use a Fluxbox theme with rounded top corners on the windows, I can launch my mouse to the upper-left or upper-right corners of the screen (two of the most prominent “hotspots” as any skilled UI designer will tell you) and right-click to get said menu as well. Right-clicking on the title bar brings up all of the window management functions I could ever need. Fluxbox isn’t the prettiest thing in the world, and it’s a little weird to someone who is used to choosing between “Start menu” and “Mac dock” ways of working with programs, but being able to call up a Start menu of sorts without even needing the button in the first place isn’t hard to get used to, and is much faster than having to aim for a button.

Honestly, I’ve gotten spoiled by Fluxbox and Linux. I can’t believe how fast a huge application like Firefox starts up under Fluxbox. Ubuntu and other distributions with heavy full-blown desktop environments are on par with Windows, but with a minimalist one like Fluxbox, the world just seems so  much faster, even with an unaccelerated VESA video driver.

I digressed a bit, but the moral of the story is this: simple is beautiful, fast, and functional. All this metro/ribbon/touchy crap wastes screen space, slows things down, and frustrates users. I knew things were going sour when Windows had keyboard shortcut accelerator underlining disabled by default, but I didn’t know we would end up with this Metro disaster. I’m making a call out to everyone to advocate for a simpler desktop that doesn’t need to change for the sake of change because it’s functionally sound and easy to work with, without the eye candy and bells and whistles and massive tool ribbons.