Allow me to explain:
a) Openness
I cannot stress this enough, but it is an extremely valuable to have the source for an OS and its userland. When porting wmwlmon I had to examine ifconfig's inner workings to find an undocumented ioctl. When writing a device driver for Linux, I would have to examine code in the kernel many times since the documentation lacked. Mark Russinovich didn't earn the title of "Technical Fellow" for nothing ... he is an expert on Windows internals, even those undocumented features ...certainly not a feat the average or competent user could accomplish.
http://ddj.com/dept/cpp/190500794?cid=RSSfeed_DDJ_Cpp
I'm familiar with Mark Russinovich - in fact, I was very impressed with his books. That's why it does not surprise me that Sysinternals was absorbed into Microsoft. And I don't disagree that it's handy to have source code occasionally (I've found myself cracking open the .NET decompiler more than once to try to understand the inner workings of the class library). So I don't disagree on this point, although your later point that MSDN and the DDK are inadequate - I would disagree. Very rarely has MSDN been opaque to me, and I've almost always found that it's not MSDN's fault, but because I'm not understanding some kind of concept.
Here is an example of why MSDN library is inadequate
but because I'm not understanding some kind of concept.
That's no excuse. If you don't know what a socket is in Unix or how they work, you can easily 'man net' or 'man netintro' that explains the network routines. Documentation is meant to be thorogh. If you didn't understand something MSDN was saying and it offered no explanation for a concept, then it wasn't thorogh enough.
Speaking of sockets, but I've heard Yoni comment that MSDN does not explain very well how to do proper socket programming and that Skywing had taught him.
man netb) Customizability
I shouldn't have to explain this, but you can use Unix for anything under the sun. It could be a desktop, a server, an OS for an embedded device, its highly portable and has a diversity of applications for all types of things. You don't have to have a GUI, you could use csh instead of bash, aterm instead of xterm, KDE instead of Window Maker, pf instead of ipf, it can run on your D-Link or Linksys router...or your calculator, telephone or PDA. It can be your tivo. You can even make your very own kernels suited to your system.
I could say all of these are true for Windows. I've used Windows workstation editions, server editions, I have a PocketPC with Windows Mobile 2003, and I've got a friend who has a Windows SmartPhone. I also use Windows Media Center Edition, since you mentioned Tivo. I can use the Monad shell instead of the command prompt - hell, I can even write my own command interpreter if I wanted to, since the console subsystem is very accessible - or I can use bbLean instead of Windows Explorer. I know Microsoft makes routers that run Windows. The only thing I can't do is make my very own kernel - and Microsoft does have programs for partners who need it, although I can't think of a single situation where *I* personally would need it. And even then, people have figured out how to hack the Windows Preinstallation Environment to be able to boot Windows live from a CD.
It looks like Microsoft is starting to
get it ... however, you're still bound to buying different versions of Windows for diferent functionality. I don't thik Windows is very portable and its obvious that it demands a lot from hardware to run. Unix is very portable, NetBSD alone exists for dozens upon dozens of platforms, and it provides all the functionality that you need Windows * version to do.
A command interpretor is known as a shell. I'm glad they adopted the terminal/shell concept.
You wouldn't need a specific windows kernel because it is a true microkernel. Most Unixes use a monolithic kernel (minus say Mach...thats Microkernel). Although, I
believe you gain a subtle performance gain by compiling certain drivers into the kernel. Ability to compile a kernel also gives you control over kernel specific features such as SMP, preemption, IPv6 support and a variety of other features.
Then let me ask you about tablet PC functionality. For my next notebook, I'm planning on getting a tablet. Does Linux have a unified API that works across Linux distributions for software input? Is the Linux API for getting drawing notes on a PDA the same as a tablet PC? (I really don't know the answer to these questions; I've never heard of a Linux API for tablets, nor have I ever heard of a PDA running Linux, but it wouldn't surprise me if they existed. The kicker is, I know that the Windows environments work the same, and I've never programmed for, for instance, ink technology).
Because of the all-mechanism-no-policy nature of Unix, Unix doesn't force the use of a GUI environment nor does it even have a GUI. Your question about tablet machines really depends on what Xorg or XFree86 can do. That said, I would be really surprised if
some X API didn't exist for touch screens. Furthermore, I would be surprised if some applications that use this API didn't exist.
What I
can tell you for sure is that there is no Window Manager or Desktop Environment that I know of that allows control with a stylus that I know of ... maybe Gnome or KDE.
One solution would be to write a daemon that interfaces with X and acts like, say, moused.
The drawback to this is - yes, you have to be licensed to do this stuff, whereas Linux is free. That's why education is important. You want to be able to plan ahead for the right software. Of course, most Windows administrators know that if you are going to need Terminal Services, then you don't get Windows Server Web Edition.
Even though Linux is free, companies still have to hire admins ... the cost is probably the same.
c) Verbosity and diagnostics
The entire boot process is a diagnostic! You have a variety of system logs sitting in /var/log, one for general messages, one for security, one for firewall, one for X, one for mail, one for printing and etc... The Event logger in Windows is dirty joke if I ever heard one. It's usually easy to know whats wrong when something goes wrong.
Well, if you're only using the event logger, then I'm going to go ahead and question your claimed knowledge of Windows. Between the event logger, boot logging, and the kernel debugger, I've only ever had one problem figuring out how to repair a Windows machine, and that was when a renegade software application (Dell MediaDirect) overwrote something in his partition table and it was causing Plug-and-Play errors in the HAL.
You shouldn't need a kernel debugger to diagnose problems. One thing I wish Windows had was a console where the kernel could print errors ... Windows has no such thing. The event logger is not verbose or detailed enough. The boot log is
okay.
d) Flexibility
I cannot stress this enough, but there is so much power at your disposal in Unix. You can do everything from mounting files as though they were disks or CDs/DVDs to having your computer run at slower or faster speeds (MHz). You have a lot of command over hardware, a lot more than you do in Windows, and quite a bit of power over the OS.
I've been mounting files as though they were disks for about 10 months now (and don't even get me started on ISOs, which have been going for much longer). Windows Vista is going to give me more granular control over the clock speed of my computer, although I've always been able to set that through my BIOS - and Windows is smart enough to know to throttle my mobile PCs when they're running on batteries.
Thats only a fraction of what you can do with
md. Regardless, you can't do things like update or view hardware parameters.
To demonstrate just one among things I can do with ACPI:
dev.acpi_ibm.0.%desc: IBM ThinkPad ACPI Extras
dev.acpi_ibm.0.%driver: acpi_ibm
dev.acpi_ibm.0.%location: handle=\_SB_.PCI0.LPC_.EC__.HKEY
dev.acpi_ibm.0.%pnpinfo: _HID=IBM0068 _UID=0
dev.acpi_ibm.0.%parent: acpi0
dev.acpi_ibm.0.initialmask: 2060
dev.acpi_ibm.0.availmask: 16777215
dev.acpi_ibm.0.events: 0
dev.acpi_ibm.0.eventmask: 2060
dev.acpi_ibm.0.hotkey: 3487
dev.acpi_ibm.0.lcd_brightness: 7
dev.acpi_ibm.0.volume: 14
dev.acpi_ibm.0.mute: 0
dev.acpi_ibm.0.thinklight: 0
dev.acpi_ibm.0.bluetooth: 0
dev.acpi_ibm.0.wlan: 1
dev.acpi_ibm.0.fan_speed: 4025
dev.acpi_ibm.0.fan: 1
dev.acpi_ibm.0.thermal: 46 43 34 48 33 -1 23 -1
Many of these, like 'thinklight', 'volume' and so forth can be modified.
You do not get this kind of flexability in Windows at all. This is a trivial demonstration, you can do other things like define the max UDP packet size, adjust caching, tune file systems and much much much more.
NOTE: The mask mibs are for devd...devd is a daemon that reacts to hardware events ... it is scriptable, very flexible indeed.
So, I would agree that Windows is inadequate for power users ... you have no room to expand, less possibility, less power, less functionality. Use a Unix system for a few months (no dual booting Windows) and I am almost positive it will open up your mind.
That would be a great experiment, but what you'd be asking me to do would be to give up doing anything useful, fun, or otherwise interesting to me for several months.
I consider things like writing device drivers, while very educational and a skill I'd like to have, to be at least one level removed from the real reason about why I'm using my computer. If I'm using the computer to write the device driver - because I'm a hardware or software vendor who needs kernel access - then fine. But if I need to write a report, or do my taxes, or hell, even get onto World of Warcraft to go to a guild meeting, I don't want to have to spend the time making OpenOffice, or recompiling that kernel driver that just caused a panic, or hacking through my (or, I should say, someone else's) source code to add the feature that Microsoft Word has had for ten years. All of these things are one level removed - or more - from me doing what I actually *want* to do with my computer.
What is your definition of a "power user," nslay? Is it someone who makes device drivers? Why not just call yourself a device driver engineer? I've got better things to do with my time than try to make my hardware work.
In the Linux world, most things come precompiled, although, in BSD you
do have to often compile your applications. You can do everything on Unix that you can do on Windows minus gaming, that includes taxes, writing reports and so forth. Very rarily do you have to hack the OS source or drivers and friends.
A power user is any user who can use, and usually requires, special and sophisticated features ... usually they are users who are curious about how things work underneath. They are making a transition between
using software to
writing software.
The device driver I wrote was for a course ... of course I don't normally write drivers, its extremely difficult. But I would like to bring to your attention that for our last project we had to write a device driver for real hardware, many had trouble
finding hardware, new and old, for this project because there are already so many device drivers available. As much as I dislike Linux...Linux supports thousands if not hundreds of devices.
See also:
http://www.freebsdsoftware.org/http://www.freshports.org/http://www.freshmeat.net/EDIT: Sorry, its freshmeat.
net