Fundamentally, the WinNT kernel and the Linux kernel both use preemptive multitasking, virtual memory addresses, paged memory, file and process abstractions, and so on. WinNT is written in a weirdly limited dialect of C++; Linux is written in a weirdly augmented dialect of C. Most people would have to agree that they're more similar than different.
It's true that Linux was originally i386-only, but that didn't really affect the kernel design much. It was always written in portable C, with just a bare minimum of assembly language where needed.
Probably the worst things about the WindowsNT kernel were: * The decision to bolt on vestigial OS/2 and POSIX interfaces (mostly done for political reasons, to get contracts where "POSIX-compatible" was a requirement). * The decision to push parts of the Window Manager into the kernel, making life harder for servers. * NTFS is overly complex (streams, anyone?) and has mediocre performance. * All the horrible hacks to keep old proprietary software running (though a lot of these were in userspace, not the kernel) * Horrible coding style-- using macros instead of void*, for example, and hungarian notation everywhere.