In Windows programmers' editors (in particular Visual Studio) there is a tab stop every 4th character position. In *nix programmers' editors there is a tab stop every 8th character position. The *nix tab convention is wholly impractical except for very small toy programs, and it wreaks havoc with properly formatted Windows source code.
Thus, the *nix tab convention effectively forces everybody to use spaces instead of tabs. At least for source code that may be worked on by more than one person. For example, the Boost library's coding guidelines require spaces instead of tabs, as I recall.
The advantage of tabs (with the Windows convention) is that you can add or remove small amounts of text without fixing up indentation. For example, for argument declarations. Spaces have no inherent advantages except fixing the problem of *nix tab convention, but that single lack of disadvantage is so great that one should always use spaces.
Practical: most editors have the ability to convert spaces to tabs and vice versa. In Microsoft's Visual Studio, however, only leading tabs can be so converted via the menus. Reportedly general conversion functionality is present in the beast, but by default not in the menus.
However, even Visual Studio can be configured to automatically insert spaces instead of directly using the typed Tab. It's not ideal, you don't get the "flex" behavior of real tabs. But it reduces the annoyance factor of spaces by some orders of magnitude, making it possible to live with the all spaces alternative – as is now de facto standard.