What is the difference between a CraftBukkit (Bukkit) server, a Spigot server, and a “Vanilla” Minecraft server?
A “vanilla” Minecraft server is an unmodified server and is in the original format direct from the creator (Mojang).
Vanilla Minecraft has no support for plugins.
CraftBukkit is a modified version of the Vanilla Minecraft server files. The Bukkit team has modified in such a way that allows for plugins to be used with the game. This is both a blessing and a curse. Plugins allow you to expand what is possible with a vanilla server. However, since CraftBukkit and all plugins are created by third parties and are unofficially supported, there are bound to be bugs which can cause problems like lag and server crashes.
Spigot was created from the CraftBukkit source code, but has been highly optimized for performance. Spigot is generally a better choice for both large and small servers, as it will use memory and CPU much more efficiently than CraftBukkit. It also runs more efficiently than Vanilla, even if you’re not using any plugins. However, Spigot is also prone to bugs.
The differences between vanilla Minecraft, CraftBukkit, Spigot and plugins is what causes a lot of problems whenever Minecraft is updated. Since CraftBukkit and plugin developers do not work directly with the developers of Minecraft, they have to wait for the update to come out first, just like all regular users. Whenever Minecraft is updated, CraftBukkit updates may take several hours to a few days before they are even released, and they are typically an experimental (read: unstable) build. The recommeded (read: stable) build takes even more time. It is only at this point that most plugin developers typically start to update their plugins to support the latest CraftBukkit version.
Note: The use of Minecraft in the post refers to Minecraft Java Edition.