| |
Kernel Comparison Linux vs Windows
This version was saved 2 years, 6 months ago
View current version Page history
Saved by widefox
on April 18, 2007 at 10:54:22 pm
Kernel Comparison: Linux versus Windows
Linux (2.6.20) v Windows (2003 R2 SP2)
This aims to be the most comprehensive0 kernel1, 2 comparison3 of the latest most popular Unix style kernel versus the latest most popular kernel. In Q2 2007, this means Linux 2.6.20 kernel versus Windows Server 2003 R2 SP2 kernel.
From 18 April 2007 this comparison is being upgraded to Vista! For the next few days there will be a mix of 2003 and Vista. Watch this space for the best Linux verses Vista kernel comparison.
Authors
I'm pleased to announce that Paolo De Nictolis has joined my previously single-handed effort. Originally inspired by, and based on TechEd 2004 - Session: Mark Russinovich 'Linux and Windows Kernel Comparison' #512. Edit this wiki! something wrong? - mail me Johnathon Weare
Also See: New Features 2.6.21 v Vista
Kernel New Feature Comparison: Linux (2.6.21) versus Windows (Vista)
Key
better or more flexible vs. worse or less flexible, neutral or controversial.
Current Kernel
Latest Release
Initial Release
Architecture
Kernel Architecture
| Architecture (kernel) | Linux | Windows | | Architecture (#1, #27) | monolithic | monolithic7 | | i.e. kernel protection from drivers (#1, #2) | N | N |
Driver Architecture
| Architecture (driver) | Linux | Windows | | i.e. drivers user space (#1, #2) | N (exceptions below) | N | | user space driver - USB (#157, -) | Y | N | | user space driver - printing | Y | N | | user space driver - FUSE | Y | N | | user space driver - Graphics27 (see below) (#159, #160) | Y | N |
OS API
OS API
| OS API | Linux | Windows | | OS API | Linux | Win32 | | OS API - user space library (#1, #2) | glibc 19 | Win32, Native20 | | OS API - Calls | system calls | library calls | | OS API - Calls total (#31, #32) | 320 | >1000 |
Available OS API
| OS API (available) | Linux | Windows | | OS API - POSIX API | Y (not cert.) | Y (N without option) | | OS API - Linux API | Y | N | | OS API - Win32 API | N (Y add-on18) | Y | | OS API - OS/2 API | N | N6 | | OS API - MS Native API | N | Y (undocumented) |
Development
Kernel Development
| Development Model (kernel) | Linux | Windows | | development model | open source | closed source | | development cycle time -major release (#8930, #9031) | 35 months | 38 months | | development cycle time -minor release (#8930, #9031) | 3 months | 31 months | | development cycle time -patch release | ongoing | ongoing |
OS Release
| OS Release | Linux | Windows | | kernel release used unpatched in OS distribution (generally) | N | Y |
Driver Development
| Development Model (drivers) | Linux | Windows | | development model | open source (few binary drivers) | closed source | | driver authors (in general) | community | manufacturer | | constant kernel ABI5 | N | Y | | drivers in kernel source tree5, 9 | Y (few binary drivers9) | N | | binary driver testing (as part of release) | N (few) | Y |
Kernel Compiler
| Kernel Compiler | Linux | Windows | | compiler (#41, -) | gcc | closed | | compiler - additional (#41, -) | - | closed SEH/VEH | | compiler version (#41, -) | 3.2-4.3 | closed | | compiler - alternative (not recommended) | Intel icc | - |
Source Code
Kernel Source Code
Kernel Source Code
Driver Source Code
Kernel + Drivers Source Code
Boot
Boot Image
| Boot Image (selection) | Linux | Windows | | boot selection of uniprocessor/multiprocessor optimised image (#67, #68) | Y | Y | | boot self patching of unified image to create uniprocessor/multiprocessor image | Y | N |
Boot Image Features
| Boot Image Features | Linux | Windows | | runtime loadable modules | Y | Y | | Relocatable kernel | Y | N |
Uniprocessor Boot Image
| Boot Image (uniprocessor, no PAE) | Linux | Windows | | files - kernel mode (no drivers25, 29) (#17, #20 #22) | vmlinuz11, 12 | NTOSKRNL.EXE, HAL.DLL, GDIPLUS.DLL | | files - user mode (no drivers25, 29) (#23, #24 #26 #30 #28) | - | NTDLL.DLL, WIN32K.SYS, KERNEL32.DLL, CSRSS.EXE22 | | filesizes - kernel mode (no drivers25, 29) (#17, #18 #20) | 1.3MB | 4.6MB (2.4MB + 0.5MB + 1.7MB) | | filesizes - user mode (no drivers25, 29) (#23, #24 #26 #30 #28) | - | 3.4MB (0.7MB + 1.7MB + 1.0MB + 0MB22) | | filesizes - total of kernel mode + user mode (no drivers25, 29) (#17 #23, #18 ...) | 1.3MB | >8.0MB |
Alternative Boot Image
| Boot Image (others) | Linux | Windows | | files kernel mode - multiprocessor, no PAE (no drivers25, 29) | vmlinuz11, 12 | NTKRNLMP.EXE, HAL.DLL, GDIPLUS.DLL | | files kernel mode - uniprocessor, PAE (no drivers25, 29) | vmlinuz11, 13 | NTKRNLPA.EXE, HAL.DLL, GDIPLUS.DLL | | files kernel mode - multiprocessor, PAE (no drivers25, 29) | vmlinuz11, 13 | NTKRPAMP.EXE, HAL.DLL, GDIPLUS.DLL |
Boot probing
| Boot (probing) | Linux | Windows | | boot - multi-threaded device probing - USB | N (Y option) | N | | boot - multi-threaded device probing - PCI | N (Y option) | N | | boot - multi-threaded device probing - ISA | N (Y option) | N | | boot - asynchronous SCSI scanning | Y | N |
Hardware
Hardware Architecture
| Hardware Architecture Support (PC) | Linux | Windows | | PC x86 | Y | Y | | PC AMD64 | Y | Y | | PC IA-64 | Y | Y | | Hardware Architecture Support (general) | | Alpha | Y | N | | PPC | Y | N | | PPC64 | Y | N | | SPARC32 | Y | N | | SPARC64 | Y | N | | ARM | Y | N | | HP PA-RISC | Y | N | | Motorola 680x0 | Y | N | | MIPS | Y | N | | MIPS (DEC) | Y | N | | PowerPC | Y | N | | IBM S/390 | Y | N | | Cell (STI) | Y | N | | Atmel AVR32 | Y | N | | Hardware Architecture Support (game consoles) | | Nintendo Wii | N | N | | Microsoft Xbox 360 | N | N (Y W2K deriv) | | Microsoft Xbox | Y | N (Y W2K deriv) | | Sony Playstation 3 (PS3) | Y | N | | Sony Playstation 2 (PS2) | Y | N | | Nintendo Gamecube | Y | N | | Hardware Architecture Support (other) | | others | Y | N |
Multiprocessor Hardware
| Multiprocessor Support (architecture) | Linux | Windows | | Multiprocessor - SMP | Y | Y | | Multiprocessor - NUMA | Y | Y | | NUMA Memory Manager Support (#421, -) | Y | Y | | Hyperthreading (SMT) | Y | Y | | Multicore | Y | Y | | Multiprocessor Support (limits) | | Maximum number of CPUs - 32bit (#47 PID limit, -) | >1024 | 4 (other edition 32) | | Maximum number of CPUs - 64bit (#47 PID limit, -) | >1024 | 4 (other edition 64) |
Hardware Components
| Hardware Support (PC) | Linux | Windows | | hardware support (new hardware15) | none-good15 | OK-good15 | | hardware support (old hardware15) | none-good15 | none-good15 | | supported list | LDP Suse RH | MS |
Hotplug
| Hardware (Hotplug) | Linux | Windows | | CPU Hotplug | Y | Y | | RAM Hotplug | Y | Y | | PCI Hotplug | Y | Y | | I/O host bridges Hotplug | Y | N | | PCI PnP | Y | Y | | ISA PnP | Y | Y (Vista N (Y option)) |
ACPI
| ACPI | Linux | Windows | | ACPI 3.0 | Y (some) | Y (some) | | ACPI 2.0 | Y (some) | Y (some) | | ACPI 1.0 | Y (some) | Y (some) |
Hard Disk
| Hard Disk | Linux | Windows | | SATA support - NCQ | Y | Y | | flash drive as disk cache | N | N | | disk with flash cache | N | N |
Peripheral Buses
| Peripheral Buses (PCIe) | Linux | Windows | | PCI-Express (PCIe) | Y | Y | | PCI-Express AER | Y | N | | Peripheral Buses (PCI) | | PCI | Y | Y | | Peripheral Buses (ISA) | | ISA | Y | Y | | Peripheral Buses (USB) | | USB 2.0 | Y | Y | | USB Bandwidth reservation | Y | Y | | USB 2.0 benchmark - hardware speed (#42315, #42415) | Y? | N | | wireless USB | Y | Y | | Peripheral Buses (other) | | InfiniBand | Y | N (Y other editions) | | ExpressCard | Y | Y | | Firewire | Y | Y |
Graphics
Graphics Architecture
| Graphics (architecture) 27 | Linux | Windows | | layered graphics system | Y | N | | modular graphics system | Y | N | | graphics system user mode (drivers) | Y | N | | graphics system user mode (system) | Y | N | | windowing system user mode (interface) | Y | N (Y some) | | graphics system only user privileges (drivers) | N | N | | windowing system only user privileges (system) | N | N | | windowing system only user privileges (interface) | Y | N |
Direct Graphics
| Graphics (direct) | Linux | Windows | | direct graphics | DRI, xv | DirectX 9 |
Graphics Drivers
| Graphics (drivers) | Linux | Windows | | graphics performance (in general15) | OK9, 15 | Good9, 15 | | driver features (in general15) | OK9, 15 | Good9, 15 | | driver authors (in general9) | community9 | manufacturer |
Process / Threads / Fiber
Process
| Process | Linux | Windows | | process - nomenclature | task | container, holds at least one thread | | process - holds address space, handle table, statistics | Y | Y | | parent-child relationship | Y | N |
Process Limits
| Process (limits) | Linux | Windows | | max processes | 2G | ? | | max groups per process | unlimited | ? | | max threads | 2G | ? | | max fibers | 2G | ? | | max stack size | ? | ? | | max core file size | see file size | ? | | max data seg size | see vm limit | ? | | max file size | see file size | ? | | max pending signals | unlimited | ? | | max locked memory | see vm limit | ? | | max memory size | see vm limit | ? | | max open files | ? | ? | | max pipe size | ? | ? | | max POSIX message queues | ? | ? | | max cpu time | unlimited | ? | | max user processes | ? | ? | | max virtual memory | see vm limit | ? | | max file locks | ? | ? |
Thread
| Thread | Linux | Windows | | thread model (#171, -) | 1×1 | m×n | | i.e. preemptive thread scheduling (-, #174) | N | Y | | thread | N (Y tasks can24) | Y | | POSIX Threads (#101, #102) | Y | N (Y add-on) |
Fiber
| Fiber | Linux | Windows | | fiber (user-space thread) | Y | Y |
Process, Thread, Fiber Performance
| Process, Thread, Fiber (performance) | Linux | Windows | | process cheap (#131, #132) | Y | N | | thread cheap (#131, #132) | Y | Y | | fiber cheap (#131, #132) | Y | Y |
Scheduler
Scheduler Unit
| Scheduler (also see Process Management) | Linux | Windows | | basic scheduling unit | task | thread |
Scheduler Features
| Scheduler (features) | Linux | Windows | | reentrant | Y | Y | | preemptible user mode | Y | Y | | preemptible kernel mode | Y | Y |
Default Scheduler
| Scheduler (default) (also see alternative) | Linux | Windows | | default discipline (RR=Round Robin) | RR, multilevel feedback queue | RR, multilevel queue + boost | | O(1) scheduler | Y | Y | | priority based | Y | Y | | Scheduler (scalability) | | pre-sorted queues | Y | Y | | queue per processor | Y | Y |
Alternative Scheduler
| Scheduler (alternative) | Linux | Windows | | alternative disciplines available | Y | N | | boot time selection | N | N | | Scheduler (available disciplines) | | Borrowed-Virtual-Time (BVT) | N | N | | Critical Path Method (CPM) | N | N | | Deadline-Monotonic Scheduling (DMS) | N | N | | Deficit Round Robin (DRR) | N | N | | Earliest Deadline First (EDF) | N | N | | Elastic Round Robin (ERR) | N | N | | fair-share | N | N | | First In, First Out (FIFO) (or First Come First Served (FCFS)) | N | N | | genetic anticipatory | N | N | | Highest Response Ratio Next (HRRN) | N | N | | interval | N | N | | Last In, First Out (LIFO) (or Last Come First Served (LCFS)) | N | N | | job shop | N | N | | least-connection | N | N | | Least Slack Time (LST) | N | N | | list | N | N | | lottery | N | N | | multilevel feedback queue Round Robin | Y | N | | multilevel queue + boost Round Robin | N | Y | | never queue | N | N | | proportional share | N | N | | Random Scheduling (RSS) | N | N | | Rate-Monotonic Scheduling (RMS) | N | N | | Rotating Staircase Deadline (RSDL) | Y | N | | Round-Robin (RR) | N | N | | shortest expected delay | N | N | | Shortest Job Next (SJN) | N | N | | Shortest Remaining Time (SRT) | N | N | | "take" | N | N | | two-level | N | N | | Weighted Fair Queuing (WFQ) | N | N | | weighted least-connection | N | N | | Weighted Round Robin (WRR) | N | N |
Scheduler Classes
| Scheduler (classes) | Linux | Windows | | scheduling classes | 4 | 2 | | 1. Normal (dynamic) priorities | 39 "100-139" | 15 "1-15" | | 2. Real Time FIFO (fixed) priorities | 100 "0-99" | 16 "16-31" | | 3. Real Time Round Robin (fixed) priorities | 100 "0-99" | 0 | | 4. Batch (IDLEPRIO) (fixed) | 39 "100-139" | 0 | | scheduling priorities ranked most favoured->least | Low->High | High->Low |
Advanced Scheduling
| Scheduling (advanced scheduling) | Linux | Windows | | Gang scheduling | N (Y partial Cell) | N |
Scheduler Details
| Scheduler (priority dynamism) | Linux | Windows | | priority dynamism - raising priority | process does not use up timeslice23 | on wakeups | | priority dynamism - lowering priority | process uses up timeslice23 | never | | Scheduler (timeslice dynamism) | | timeslice vary - automatic (entire range - priority, interactivity) | Y | N | | timeslice vary - manual (user setting, window boost) | N | Y | | timeslice vary - automatic (window boost) | N | Y | | Scheduler (prioritising tweaks) | | priority interactive boost/CPU bound cut | -5 to +5 (batch = +5) | ? | | focused window process boost (-, #342) | N | Y | | focused window process boost - timeslice change (-, #342) | - | 3x | | i.e. Interactive Process boost | Y | Y |
Scheduler Timeslice - Uniprocessor
| Scheduler - Uniprocessor (timeslice) | Linux | Windows | | timeslice runtime configurable (default) (-, #332) | N | Y (Server or Client) | | timeslice - uniprocessor Client (range) (#331, #332) | 10ms-200ms | 10ms-120ms | | timeslice - uniprocessor Client (default) (#331, #332) | 100ms | 20ms, 40ms, 60ms | | i.e. process minimum CPU17 | 4.8% | 7.7% | | timeslice - uniprocessor Server (range) (#331, #332) | 10ms-200ms | 120ms | | timeslice - uniprocessor Server (default) (#331, #332) | 100ms | 120ms |
Scheduler Timeslice - Multiprocessor
| Scheduler - Multiprocessor (timeslice) | Linux | Windows | | timeslice - multiprocessor Client (range) (#331, #332) | 10ms-200ms | 15ms-180ms | | timeslice - multiprocessor Client (default) (#331, #332) | 100ms | 30ms, 60ms, 90ms | | timeslice - multiprocessor Server (range) (#331, #332) | 10ms-200ms | 180ms | | timeslice - multiprocessor Server (default) (#331, #332) | 100ms | 180ms |
Scheduler Details
| Scheduler - Multiprocessor/Core (affinity) | Linux | Windows | | scheduler SMP processor affinity | Y | Y | | scheduler NUMA node affinity | Y | Y | | scheduler Core affinity | Y | Y | | scheduler Hyperthread (SMT) affinity | Y | Y | | Scheduler - Multiprocessor/Core (priority) | | scheduler favours physical CPU over Hyperthread | Y | Y | | scheduler favours physical CPU over Multicore | Y | Y | | Scheduler - Multiprocessor/Core (load balancing) | | scheduler load balancing - initial | Y | Y | | scheduler load balancing - re-balance | Y | N | | scheduler load balancing - smpnice | Y | N | | scheduler load balancing period (#151, -) | 200ms | - |
Scheduler Performance
| Scheduler (performance) | Linux | Windows | | scheduling latency (average) (#201, #20210) | 0.009mS | 2mS10 | | scheduling latency (worse) (#203, #20410) | 0.3mS | 16mS10 |
Real-Time
| Soft Real-Time Support | Linux | Windows | | Soft Real-Time Support | N (Y partial) | N | | Hard Real-Time Support | | Hard Real-Time Support | N (Y customised versions33) | N 34 |
Power
| Power Management | Linux | Windows | | idle process | Y | Y | | CPU frequency throttling (ACPI) | Y | Y | | CPU voltage throttling (ACPI) | Y | Y | | peripheral sleep (ACPI) | Y | Y | | system sleep - software suspend to RAM (ACPI) | Y | Y | | system sleep - software suspend to disk (ACPI) | Y | Y |
Memory
Memory Hardware
| Memory (Hardware Support) | Linux | Windows | | Maximum RAM - 32bit | 64GB | 4GB (128GB other editions) | | i.e. PAE (#111, #112) | Y | N (Y other editions) | | Maximum RAM - 64bit | 1024GB-8589934592GB | 32GB (2048GB other editions) | | Memory (Hardware Features) | | Performance Acceleration Technology (PAT) | N | Y | | MTRR | Y | Y | | MTRR not needed (superseded by PAT) | N | Y | | ECC | Y | Y |
Virtual Memory
| Virtual Memory Management (working sets) | Linux | Windows | | working sets | global | per process | | working set management uses "clock" algorithm | Y | Y | | i.e. working set management - no set cap | Y | N | | i.e. working set management - LRU memory page | used on the entire system | removed for that process | | i.e. working set management - tuner adjusts sets according to memory needs | - | Y | | swapper (#45, -) | N | N | | Virtual Memory Management (general) | | per-CPU kernel memory buffers | Y | Y | | lock pages in memory | Y | Y | | copy-on-write executables (COW) (#81, #82) | Y | Y | | demand paging (#311, #312) | Y | Y |
Virtual Memory Limits
| Virtual Memory Management (limits) | Linux | Windows | | split user-mode/kernel-mode 32bit 1GB/3GB | Y | N | | split user-mode/kernel-mode 32bit 2GB/2GB | Y | Y | | split user-mode/kernel-mode 32bit 3GB/1GB | Y | Y | | split user-mode/kernel-mode 32bit - option 4GB/4GB | Y | N | | i.e. maximum memory per process 32bit | 3GB 4GB split option | 3GB | | maximum memory per process 32bit (PAE) (#113, #114) | N (Y non-standard 64GB) | N (Y other editions 64GB) | | split user-mode/kernel-mode 64bit (#301, #302) | 8388608 TB/8388608 TB | 8 TB/8 TB | | i.e. maximum memory per process 64bit (#301, #302) | 8388608 TB | 8 TB |
Swap
| Virtual Memory Management (swap) | Linux | Windows | | swap prefetch | N (Y with patch) | N | | swap speculative | N (Y with patch) | N | | swap performance - amount used | less15 | more15 |
Clock
Hardware Clock
| Hardware Clock | Linux | Windows | | timer interrupt frequency default - uniprocessor Hz (#321, #322) | 250 | 100 | | timer interrupt frequency build time configurable - uniprocessor Hz (#321, #322) | unlimited | N | | timer interrupt frequency - multiprocessor Hz (#321, #322) | 250 | 67 | | timer interrupt frequency build time configurable - multiprocessor Hz (#321, #322) | unlimited | N |
Hardware High-Resolution timer
| Hardware High-Resolution timer | Linux | Windows | | Time Stamp Counter (RDTSC) - uniprocessor (#323, #324) | Y | N | | Time Stamp Counter (RDTSC) - multiprocessor (#323, #324) | Y | Y |
Interrupts
First Level Interrupt Handling
Second Level Interrupt Handling
Multiprocessor Interrupt
Interrupt Performance
| Interrupt (enhancement) | Linux | Windows | | Adaptive Interrupt Coalescing (#167, #168) | Y | Y | | Interrupts (performance) | | interrupt latency (average) (#155, #15610) | 0.011mS | 0.036mS10 | | interrupt latency (maximum) (#191, #19210) | 1mS | 45mS10 |
I/O
I/O General
| I/O Management (general) | Linux | Windows | | centred around | inode | file object | | layered I/O model | N | Y | | generic file descriptors (pipes and network connections that act like files) | Y | N | | wake-one socket semantics (#512, #512) | Y | Y |
Default I/O Scheduler
| I/O Scheduler (default) | Linux | Windows | | default discipline | CFQ | SCAN? | | i.e. I/O priority based | Y | N |
Alternative I/O Scheduler
| I/O Scheduler (alternative) | Linux | Windows | | alternative discipline available | Y | N | | alternative discipline selected at boot | Y | N | | alternative discipline selected at runtime | Y | N | | alternative discipline assignable per device | Y | N | | I/O Scheduler (available disciplines) | | anticipatory | Y | N | | Completely Fair Queuing (CFQ) | Y | N | | Deadline | Y | N | | Elevator algorithm (SCAN) | N | Y? | | Elevator algorithm variants (C-SCAN, LOOK, C-LOOK, FSCAN) | N | N | | First In, First Out (FIFO) (or First Come First Served (FCFS)) | N | N | | Highest Response Ratio Next (HRRN) | N | N | | Last In, First Out (LIFO) | N | N | | N-Step-SCAN | N | N | | Random Scheduling (RSS) | N | N | | requested merge FIFO (NOOP) | Y | N | | Shortest Seek / Service Time First (SSTF) (shortest seek first) | N | N | | Stochastic Fair Queuing (SFQ) | N | N |
I/O Performance
| I/O Management (performance) | Linux | Windows | | zero-copy file sending | Y | Y |
Vectored I/O
| I/O Management (vectored) | Linux | Windows | | Scatter/Gather DMA | Y | Y | | vectored I/O support (#501, #502) | Y | Y | | asynchronous vectored I/O support (#501, #502) | Y | Y |
Asynchronous I/O
| I/O Management (asynchronous) | Linux | Windows | | asynchronous I/O support (#502, #502) | Y | Y | | asynchronous I/O support - general system (#512, #512) | N | Y | | asynchronous I/O support - system (#512, #512) | AIO (or epoll) | completion ports | | asynchronous I/O cancellation | N (Y with patch) | N |
I/O Priority
| I/O Priority | Linux | Windows | | I/O priority based on thread priority - default | Y | N | | I/O priority based on thread priority - option | Y | N | | I/O priority - user control (read, write) (#43, #44) | ionice | N |
I/O Priority - read
| I/O Priority - read | Linux | Windows | | I/O timeslices (read) (#43, #44) | Y | N | | I/O bandwidth reservation (read) (#43, #44) | N | N | | I/O priority (read) (#43, #44) | Y | N | | I/O priority - scheduling class levels (read) - realtime (IOPRIO_CLASS_RT) (#43, #44) | 8 | 0 | | I/O priority - scheduling class levels (read) - best effort (IOPRIO_CLASS_BE) (#43, #44) | 8 | 0 | | I/O priority - scheduling class levels (read) - idle (IOPRIO_CLASS_IDLE) (#43, #44) | 1 | 0 |
I/O Priority - write
| I/O Priority - write | Linux | Windows | | I/O timeslices (write) (#43, #44) | Y | N | | I/O bandwidth reservation (write) (#43, #44) | N | N | | I/O priority (write) (#43, #44) | N | N | | I/O priority - scheduling class levels (write) - realtime (IOPRIO_CLASS_RT) (#43, #44) | 8 | 0 | | I/O priority - scheduling class levels (write) - best effort (IOPRIO_CLASS_BE) (#43, #44) | 8 | 0 | | I/O priority - scheduling class levels (write) - idle (IOPRIO_CLASS_IDLE) (#43, #44) | 1 | 0 |
Synchronization
| Light-Weight Synchronization | Linux | Windows | | critical sections (#512, #512) | Y | Y | | futexes (prioritise waits) (#512, #512) | Y | N | | interprocess (prioritise waits) (#512, #512) | Y | N |
Filesystem
File Limits
| File (limits) | Linux | Windows | | Block device limit | 16TB / 8EB | ? | | Major/minor numbers | 4k/1M | ? |
Filesystem caching
| Filesystem (caching) | Linux | Windows | | single global common cache | N | Y | | i.e. Virtual File Cache - global | Y | Y | | i.e. Virtual File Cache - user cache14 | N | Y | | directory lookup caching (good caching) (#512, #512) | Y | N |
Filesystem Mechanisms
| Filesystem (mechanisms) | Linux | Windows | | FUSE | Y | N | | Loopback | Y | N | | automounter | Y (autofs 4) | N (Y only network shares) | | automounter (obsolete) | N (autofs 3) | N |
Best-in-class Filesystem
| Filesystem (best in class only) | Linux | Windows | | safe/mature | ext3 | NTFS | | general (#351, ) | XFS | NTFS | | general (new) - ZFS (#355, #356) | N | N | | network - NFS 4 (#353, #354) | Y | N (Y with add-on) | | cross-platform file exchange - FAT32 | Y | Y | | cross-platform network - SMB | Y | Y |
General Purpose Filesystem
| Filesystem (general purpose) | Linux | Windows | | ext4 | Y | N | | ReiserFS (3) | Y | N (Y readonly with freeware) | | Reiser4 (4) | N (Y partial as patch) | N | | XFS | Y | N (Y with freeware) | | NTFS | N (Y partial support) | Y | | JFS | Y | N | | ISO 9660 (CDFS) | Y | Y | | UDF - read | 2.0x (2.50 patch) | 2.0x | | UDF - write | 2.0x (1GB limit) | N (2.0x with add-on) | | OCFS2 | Y | N | | HFS+ (HFSX) | Y | N | | ZFS | N | N | | NILFS | N (Y with patch) | N |
Network Filesystem
Legacy Filesystem
| Filesystem (legacy) | Linux | Windows | | FAT (32) | Y | Y | | FAT (16) | Y | Y | | FAT (12) | Y | Y |
Virtual Filesystem
| Filesystem (virtual) | Linux | Windows | | configfs | Y | - | | proc | Y | - | | sysfs | Y | - | | usbfs | Y | - | | tmpfs | Y | - | | devpts | Y | - |
Encrypted Filesystem
| Filesystem (encrypted) | Linux | Windows | | cryptographic layer - generic | dm-crypt | EFS | | eCryptfs | Y | N | | EFS (NTFS) | N | Y |
Obsolete Filesystem
| Filesystem (obsolete) | Linux | Windows | | UMSDOS | N (Y old kernels) | - | | Fossil | N (Y as patch) | N | | AFS | Y | N | | BFS (BeFS) | Y | N | | BFS (UnixWare Boot Filesystem) | Y | N | | NFS 2 | Y | N | | ext2 | Y | N (Y with freeware) | | minix | Y | N | | OCFS | Y | N | | QFS | N | N | | FFS (AFFS) | Y | N | | Coda | Y | N | | Xenix | Y | N | | HPFS-2 | Y | N | | HPFS | Y | N | | HFS | Y | N | | sysvfs | Y | N | | adfs | Y | N | | UFS2 | Y (partial) | N | | UFS | Y (partial) | N | | EFS (SGI) | Y | N |
Specialist Filesystem
| Filesystem (specialist) | Linux | Windows | | FATX | N (Y as patch) | N | | ROMFS | Y | N | | CDfs (not CDFS) | N (Y with patch) | N | | openpromfs | Y | N | | cramfs | Y | N | | Google File System (GFS) - corporate internal | N (Y unreleased patch) | N |
Miscellaneous Filesystem
| Filesystem (miscellaneous) | Linux | Windows | | debugfs | Y | N | | devfs | Y | N | | devpts | Y | N | | freevxfs | Y | N | | hostfs | Y | N | | hugetlbfs | Y | N | | jbd | Y | N | | jffs | Y | N | | jffs2 | Y | N | | jfs | Y | N | | ncpfs | Y | N | | nls | Y | N | | qnx4 | Y | N | | ramfs | Y | N | | sysv | Y | N |
Non Filesystem - swap
| Non Filesystem (swap) | Linux | Windows | | swap files | Y | Y | | swap partitions | Y | N | | swap format | Linux | Windows |
Network
General Network
| Network (general) | Linux | Windows | | protocols (#55, -) | | | | TCP buffer auto sizing | Y | Y | | jumbo packets | Y | Y | | IPv4 | Y | Y | | auto TCP receive window resize | Y | N | | UDP-Lite | Y | Y |
IPv6 Network
| Network (IPv6) | Linux | Windows | | IPv6 | Y | Y | | Native IPv6 stack | Y | N |
Wireless Network
| Network (wireless) | Linux | Windows | | Wi-Fi (IEEE 802.11) A,B,G,pre-N | Y | Y | | Wi-Fi encryption - WEP, WPA, WPA2 | Y | Y | | Wi-Fi Quality of Service WMM | Y | Y | | Wi-Fi Power Save WMM | Y | Y | | Bluetooth 2.0 | Y | Y | | Other | Y | Y |
Other Network
| Network (other) | Linux | Windows | | IR | Y | Y |
Sound
| Sound (system) | Linux | Windows | | audio system | ALSA | DirectSound | | handles multiple audio streams | Y | Y | | full-duplex | Y | Y | | SMP, thread-safe | Y | Y | | user space software mixing | Y | Y? | | user space "loopback/snoop" capabilities | Y | ? | | driver features (in general15) | OK | Good | | Sound (performance) | | audio latency low15 | Y | N (Y with Steinberg's ASIO) | | audio video sync accurate15 | Y | N |
Virtualization
| Virtualization | Linux | Windows | | Virtualization - CPU extension support (KVM,-) | Y | N | | Virtualization (runs under VM) | Y | Y | | Paravirtualization (e.g. lguest/lhype/rustyvisor) | Y | N |
Security
Security Model
| Security (model) | Linux | Windows | | security model - Standard Unix Model | Y | N | | i.e. immunity from viruses (given common usage15) | Y | N | | security model - ACL | N (Y SELinux21) | Y | | security model - POSIX ACL | Y | Y | | security model - Security Modules (#401, #402) | Y - LSM | Y - CAS | | user definition - privileges, member groups | Y | Y | | security is implemented - any object manager object (files, processes...) | N | Y | | security is implemented - free from object-by-object assignment | N | Y |
Memory Security
| Security (memory) | Linux | Windows | | NX | Y | Y | | ASLR | Y | N |
Cryptography
| Security (cryptography) | Linux | Windows | | cryptography support - generic | N | Y35 | | cryptography - filesystem (see Filesystem (encrypted)) | Y | Y |
Advanced Security
| Security (advanced) | Linux | Windows | | auditing support | N (Y option) | Y | | tampering protection | N (Y SELinux36) | Y |
Maintenance
| Maintenance | Linux | Windows | | Updates - downloads | Y | Y | | Self fix / extend | Y | N (Y with licence) |
Support
| Support | Linux | Windows | | Support - other users via internet | Y | Y | | Support - developers via internet | Y | N (Y with licence) | | Support - companies | Y | Y |
Availability
Key2
current, non-current, future.
2007
| Kernel Release | Linux Kernel32 | Linux OS32 | Windows Kernel | Windows OS | | 2007 Q4 | 2.6.23 | | | | | 2007 Q3 | 2.6.22 | | NT 6.0.6001 | Vista Server | | 2007 Q2 | 2.6.21 | | | | | 2007 Q1 | 2.6.20 | 2.6.20.6 Foresight 1.2 2.6.20.6 GParted 0.3.4-6 CRUX 2.3 Sabayon 3.3 Ubunutu/Kubuntu Feisty Fawn 7.04, Fedora Core 7 | NT 6.0.6000 NT 5.2.3790 | Vista 2003 R2 SP2 |
2006
| Kernel Release | Linux Kernel32 | Linux OS32 | Windows Kernel | Windows OS | | 2006 Q4 | 2.6.19 | 2.6.19.5 KNOPPIX 5.2 | | | | 2006 Q3 | 2.6.18 | 2.6.18.2 openSUSE 10.2 CentOS 5.0 Debian 4.0 etch Fedora Core 6 zod, Kanotix 2006-01-rc4 | | | | 2006 Q2 | 2.6.17 | Red Hat RHEL5, Ubunutu/Kubuntu 6.10 edgy, Mandriva 2007, Gentoo 2006.1) | | | | 2006 Q1 | 2.6.16 2.6.15 | 2.6.16.21 SUSE Linux Enterprise 10, 2.6.16.27 PCLinuxOS 0.93a MEPIS 6.5 | | |
2005
| Kernel Release | Linux Kernel32 | Linux OS32 | Windows Kernel | Windows OS | | 2005 Q4 | | | NT 5.2.3790 | 2003 R2 |
2004-2000
| Kernel Release | Linux Kernel32 | Linux OS32 | Windows Kernel | Windows OS | | 2004 Q4 | 2.6.9 | Red Hat RHEL4 | | | | 2003 Q4 | 2.6 | | | | | 2003 Q2 | | | NT 5.2 | 2003) | | 2001 Q4 | | | NT 5.1 | XP) | | 2000 Q1 | | | NT 5 | 2000) |
Kernel Comparisons
| What | Author | Windows | Linux | Solaris | FreeBSD | OS X | Other | | This page | Johnathon Weare | 2003 R2 SP2 | 2.6.20 | | | | | | This page (see history at bottom of page) | Johnathon Weare | 2003 R2 | 2.6.19, 2.6.18 | | | | | | New features | Johnathon Weare | Vista Server, Vista, 2003 R2 SP2 | 2.6.21 2.6.20 2.6.19, 2.6.18, 2.6.17 | | | | | | Better in other Kernels/OS | Johnathon Weare | Vista | 2.6.20 | 10 | 6.1 | 10.4 | Y | | | | | | | | | | engr.smu.edu (ppt) | Solomon, Russinovich | XP | 2.6 | | | | | | Overview | Wikipedians | 2003 | 2.6.x | 10 | 6.1 | 10.4 | Y | | sekhon.berkeley.edu | Jasjeet Sekhon | | 2.6 | | | 10.4 | | | miceplans.net | Clayton, Talbot, Zola | | 2.6.8 | | | 10.3.7 | | | opensolaris.org | Max Bruning | | 2.6 | 10 | 5.3 | | | | softpanorama.org | Nikolai Bezroukov | | 2.6 | 10 | | | | | 2cpu.com | jim@2cpu.com | | 2.6.4, 2.4.25 | | | | | | freebsd.org | Bruce, Stokely | 2000 | 2.2 | | 4 | | | | webtechniques.com | Nathan Boeger | | 2.2 | | 4.1 | | |
(Other = OpenBSD, Plan9, openVMS, RTOS)
Notes
0 Most comprehensive kernel comparison - as shown by Kernel Comparisons
1 A pragmatic approach is used to compare the two kernels. Sometimes one kernel has a parallel outside of the kernel domain, or due to the fact that direct comparison is sometimes impossible or practically infeasible. An example of this is the SLOC calculations28.
2 Some of this comparison only applies to 32bit PC x86 systems.
3 this is a kernel comparison. This is not a kernel review, or kernel programming guide, and only involves non-kernel issues/OS issues when related to the kernel in at least one of the compared kernels.
4 Kernel burning edge probably more correct Kernel burnt edge as this is for the most popular production kernels, rather than burning edge kernels
5 Constant kernel ABI vs having drivers in kernel source tree is controversial. Driver authors favouring building on the constant API, and kernel authors favouring building with the flexibility of no ABI.
6 Y in W2K
7 Monolithic name is used, due to the controversy over the term "Hybrid". Essentially, the term "Hybrid" may be technically correct (by definition) but makes ambiguous the issue of kernel mode versus structure hides the fact that there are more subsystems in kernel mode than most monolithic kernels (graphics GDI/GDI+, printing etc.). Also, although the kernel may be structured in a similar way to a microkernel, it is in no way a microkernel, or contain a microkernel. It simply does no message passing due to kernel mode, just like other monolithic kernels.
8In the Linux community C++ in the kernel is seen as undesirable due to leaving too much kernel control to the compiler. An argument can be made that the size of modern kernels lend themselves better to C++, and that C++ compilers have matured. I therefore leave this as controversial.
9Graphic card support in general varies, but at least initially, most graphic cards either have basic Linux support or for instance ATI and NVIDIA provide binary only drivers.
10when there is no alternative, sometimes outdated references must be used - for older OS versions - e.g. NT, old hardware, or benchmarks done with very different criterion, or due to basic difference in OSes. In these cases, no direct comparison should be made, so the comparison is not coloured.
11no restriction on filename. By convention it is called vmlinuz or zImage, bzImage.
12image compiled without PAE support
13image compiled with PAE support
14can cause inconsistencies
15unsubstantiated claim
16estimate, based on #6 W2K 63,000 bugs in total 29million results in 0.2% . Note this is much lower than a general estimate for commercial software 2-3% (20 to 30 bugs for every 1,000 lines) #91 , which might possibly be considered as an upper bound.
17one process at maximum priority vs one at minimum priority (settable with user privileges) competing for single CPU: Linux 10ms / (200ms + 10ms) = 4.8%, Windows 10ms / (120ms + 10ms) = 7.7%
18 with Wine
19 for some comparable equivalent calls to Windows
20 both OS API and Native API
21 some distributions
22 0.7MB not counted
23 Linux priority level number goes down when priority increases / goes up when decreasing
24 tasks can act like Windows threads by sharing handle table, PID, address space
25 no drivers are included. The drivers will significantly add to the file sizes.
26estimate
27 Some aspects like graphics are not considered primarily as kernel issues in Linux, but are in Windows due to the GDI/GDI+ being inside the kernel, so are included here.
28 Also note that the SLOC calculations are based on data from incompatibly mixed sources - kernel, total OS, drivers, also with a lack of hard data on the Windows side. Also, there are two viewpoints 1. the kernel as a whole (covering all ports, and drivers) 2. a typical kernel (x86 port, typical hardware). Currently, 1. is followed (due to lack of data on 2.) but I think 2. could give more meaningful results for a comparison for real kernel usage, as opposed to theoretical kernel comparison.
29 includes GDI+
30major: Linux 2.4.0 January 2001 -> Linux 2.6 December 2003, minor: Linux 2.6.18 -> Linux 2.6.19
31major: Windows 2000 February 2000 -> Windows Server 2003 April 2003, minor: Windows Server 2003 April 2003 -> Windows Server 2003 R2 December 2005
32this is the bundled version which might be able to be updated online. Manually installing the latest Linux kernel may not be a supported configuration.
33These customized versions are separately maintained branches / folks of Linux.
34Windows CE based real-time systems have a separate CE kernel, and are not based on the NT kernel.
35Windows supports natively cryptography since 2000 edition through its Data Protection API. Linux kernel has no such support as of 2.6 version, even if plenty of cryptography packages are available for free for Linux platform. Vista improves cryptography support with Cryptography Next Generation API.
36Windows Vista has integrated tampering protection through securable objects labelling with Mandatory Integrity Control Infrastructure. Linux kernel has not such support as of 2.6 version, whilst adding a Mandatory Access Control through SELinux, grsecurity/PaX or AppArmor you have not only tampering, but also disclosure protection.
References
#0 This document http://widefox.pbwiki.com/Kernel%20Comparison%20Linux%20vs%20Windows Johnathon Weare
#1 monolithic kernel
#2 monolithic kernel aka "hybrid" kernel7
#3 estimate based on total SLOC28 + dependent on driver selection, X not included
#4 estimate based on total SLOC which is sourced from Gary McGraw "Building Secure Software - How to avoid security problems the right way"28 i.e. dependent on driver selection, GDI/GDI+ included
#5 0.016% defect density 2005 survey, 2004 survey, + guess 0.004% increase 2006 update Linux bugs increasing = 0.02%
#610 based on estimate16 63,000 in W2K Software Quality: Why Windows 2000 has 63,000 \"bugs\" and Linux* does not
#7 roughly - depends on options kernel, Microkernel
#8 estimate, based on newsgroup discussions Microkernel
#9 interrupts
#10 ISR, NT Lesson 8 - Interrupt and Exception Handling
#11 interrupts, I will Do It Later: Softirqs, Tasklets, Bottom Halves, Task Queues, Work Queues and Timers
#12 DPC
#13 Interrupt_handler
#14 IRQL
#15 Open source
#16 Closed source
#17 1.3MB vmlinuz from Linux 2.6.18 image on PPro/Celeron/PII/PIII/P4 Debian linux-image-2.6.18-3-686 (2.6.18-6) package
#18 >4.6MB=(2.4+0.5+1.7+?)MB , 8.0MB=4.6+(0.7+1.7+1.0)MB Windows 2003 SP1 fix Note - it is not clear which files correspond to kernel mode and user mode.
#20 NTOSKrnl.exe
#21 no known other files
#22 Windows_NT_Startup_Process, Server info
#23 no other known files
#24 Internet Explorer bug,
#25 no other known files
#26 Native API, bugfix
#27 no other known files
#28 csrss.exe
#31 kernel.org
#32 Real Time Systems with MS Windows CE, Wikipedia Win32
#41 Documentation/Changes kernel change
#43 default=(cpu_nice + 20) / 5 ioprio.txt
#44 Windows Vista: Kernel Changes - I/O, I/O, It is off to work I go...
#45 "swap daemon" is working set trimmer
#47 kernel build option
#51 user space device drivers
#52 estimate, based on #51 but reduced 10% due to larger size of Windows kernel
#55 networking
#57 see #3 - from 2.4.x study
#58 see #4
#67 Linux_2_6_17
#68 boot time flag NT kernel, but always SMP kernel?
#81 Linux
#82 Binding an Executable
#89 kernel changes
#90 Microsoft Windows
#91 survey 2004
#99 IPL
#101 Native POSIX Thread Library (NPTL)
#102 with freeware Open Source POSIX Threads for Win32
#111 PAE
#112 PAE
#113 non-standard extension
#114 Address Windowing Extensions (AWE)
#122 NT RT
#131 Thread
#132 Thread
#151 Linux scheduler
#155 evaluationengineering
#15610 36uS 1998 NT Real-Time, non-independent result 199510 23uS (mid of 17-30uS) NT RT , and NT latency
#157 user space device drivers
#161 Kernel Analysis HOWTO
#162 Advanced DPCs
#163 Linux Networking
#164 levels used
#167 Linux Networking
#168 Performance Tuning Guidelines for Microsoft Services for Network File System
#171 NPTL
#174 W2K thread scheduling
#191 997uS Montavista
#19210 NT benchmark 45027uS NT RTX realtime performance
#201 Montavista, similar to kerneltrap RT benchmark
#20210 benchmark - "few mS" taken as 2mS Michael B. Jones and John Regehr. "The Problems You're Having May Not Be the Problems You Think You're Having: Results from a Latency Study of Windows NT". In Proceedings of the 7th Workshop on Hot Topics in Operating Systems, pages 96-101, March 1999.
#203 Montavista
#20410 benchmark - as #202 16ms from "software delays up to 16ms", ignored "hardware delays up to 30ms"
#301 Linux maximum memory per process, Virtual Memory in the IA-64 Linux Kernel
#302 Running Oracle on 10g on Windows Server 2003 x64 Editions: Unlimited Scalability and Performance
#311 Demand paging
#312 Wake up...
#321 Linux: Changing The Default Hertz (2.6.13 Kernel Release change)
#322 Thread Scheduling (set by HAL not kernel)
#323 RDTSC read time stamp counter
#324 How to Use Windows* XP Power-Event Interception and Control
#331 Linux Optimization
#332 - as #322
#342 - as #322
#351 filesystem comparison
#352 crossmeta ext2, XFS, ReiserFS add-on
#401 Linux Security Modules (LSM)
#402 CAS
#411 check of the Linux source!
#412 VEH, GDI
#421 What is what in Linux 2.6.16
#42315 linux kernel monkey log
#42415 as #423
#501 Asynchronous I/O and vectored operations, API changes: interrupt handlers and vectored I/O
#502 Inside I/O Completion Ports
#512 Comparing Windows XP and Linux (PPT), and Windows vs Linux: A tale of two kernels, and TechEd 2004 - Session: Mark Russinovich \"Linux and Windows Kernel Comparison\" The original source of information, and inspiration for this page.
Further Reading
Related Issues
Security Hardened Systems
General OS Flexibility
Comments
- Mentions / Links Wikipedia, Linuxtoday, OSnews, Linuxelectrons, Reddit, Fatpenguinblog, CSL Blog, Justanothertechblog, news.org.ru, b.hatena.ne.jp, rocteur.cc, Duri's blog, usenix.org.uk, linux1.no, opennet.ru, riff.org, meneame.net, ecualug.org, abclinuxu.cz, nixadmins.net, linuxnews.pl, idg.pl, cofradia.org, pcworld.pl, iraqilinux.org
Vertical Tab Firefox Widefox
Johnathon Weare © Johnny Weare 2007
Kernel Comparison Linux vs Windows.2007-04-18-22-54-22
|
|
Tip: To turn text into a link, highlight the text, then click on a page or file from the list above.
|
|
|
|
|