I've seen both — a machine running Windows Server and a machine running Ubuntu Server. Both do the job of a server.
I don't like the question "which one is better", because the answer is mostly personal habit. Instead I ask: when something breaks, which one gets you to the fix faster? Six differences decide that.
1. Is configuration text, or settings?
On Linux, the Nginx configuration lives in /etc/nginx/nginx.conf. One text file. You can put it in Git, diff it, and copy it between two servers.
On Windows, IIS configuration lives in several places: the web.config file, the Registry, and dozens of screens in IIS Manager. All of them have to be right.
The result: on Linux it's "open this file, change this line". On Windows you first have to remember which place you changed.
Text-based configuration is the biggest convenience for anyone working remotely, because you don't have to remember anything.
2. Do you know what happens when you press the button?
On Linux:
sudo systemctl restart nginx
That's it. The service restarted, you can see how long it took, and if it fails it tells you why.
On Windows, restarting a service sometimes says "success", sometimes asks you to stop dependent services first, and in some cases says "success" without having done the work, leaving you waiting half an hour.
That's not "Windows is bad". But Linux's systemd offers a much more honest contract: it says what it will do, does it, and tells you the result.
3. When something doesn't work, how do you find out why?
In practice, this is the difference that matters most.
On Linux, everything is in one place and can be queried:
journalctl -p err -b # errors since this boot
journalctl -u nginx # everything from this service
journalctl -f # follow live
dmesg -T # the kernel, hardware included
Windows has Event Viewer, and it's a workable tool. But the one strength of journalctl on Linux is that it's text: you can pull a service's entire history on a timeline, read it by hand, grep it, and paste it onto another machine to search there. It's also exactly where a beginner should look first.
4. Installing software
On Linux you run apt install nginx. The package manager installs every dependency, resolves version conflicts, and lists what it installed.
On Windows you run an installer. It may install on its own or alongside other programs; if there's a conflict, things break quietly. After installing, you may find yourself waiting on "Windows Update pending".
Day to day, this isn't a nuisance. But on a night when you need to install twenty packages and you're stuck waiting in the middle, you feel the difference.
5. Rolling back
On Linux, if you ran apt install, apt remove undoes it and cleans up whatever came in as dependencies. To roll back a broken configuration, it's enough to have kept the file under version control.
Windows has "Add or Remove Programs", but sometimes leftovers of a component remain after an update. And sometimes the thing you removed was needed by another program, which then breaks too.
Windows Update forcing a restart is part of this as well. If work wasn't saved, an update can wipe it out.
6. What dies when the disk fills up
This is perhaps the most honest difference between the two.
On Linux, when the disk fills up, things happen in this order:
- Logs can't be written
- Some services fail and stop because they can't log
- But the system itself stays up
So if the disk is full, the error message really says it's full. There's only one cause in front of you: no space.
On Windows, when the disk fills up, the Registry can't be written, Windows Update gets stuck, some services stop unexpectedly, and the error message is usually "insufficient resources" — or nothing at all. There's no room to write to the event log either, so you can't see the cause.
On Linux you say "my disk is full" and you know what to do. On Windows you say "something broke" and go looking for the reason.
So which one?
What I've seen is this: whichever system is installed on the customer's server, that's the system the outage gets fixed on. So the real skill isn't tied to an operating system; the method of troubleshooting is shared.
The one advantage of having seen both sides is this: whichever side you're working on, you know what the other side would do.
Next up: the first ten minutes of a customer outage. That's where all this actually pays off.