We recommend PaperMC as your go-to server software as it combines the best performance and supporting vanilla gameplay aspects and datapacks along with Spigot and Bukkit plugins. The PaperMC download link is here.
Vanilla Software (made by Mojang):
The vanilla software is available for download from the Minecraft website.
This will offer you the full vanilla gameplay aspects but not supporting plugins from Spigot or elsewhere. However, it does support vanilla data packs which can offer some extra functionality. It runs on Java and is only recommended for a small SMP server with friends as if this is used for a bigger/public SMP, it's not well optimized and will have no support for AntiCheat plugins.
Bukkit (CraftBukkit) and Spigot:
We have combined Bukkit and Spigot into the same section because they are fairly similar.
Bukkit is the original fork of vanilla software supporting Bukkit plugins (which can be found here). Bukkit focuses on sticking to vanilla as much as possible. This means that it runs a little better than vanilla but has a lot in common with it.
Spigot is a fork of Bukkit and like Bukkit, it has been around since nearly the beginning of Minecraft Java server software. Spigot's aim is to provide a vanilla experience whilst also having better performance and support for more plugins and better APIs. The Spigot plugin page can be found here (it's the best place for Spigot (and Spigot forks) plugins as it has a really active community).
PaperMC is the software that we recommended for a multitude of reasons.
It is a fork of Spigot which aims to provide some of the best performance, whilst also having vanilla gameplay aspects. It supports most if not all Spigot and Bukkit plugins found on most sites. It supports (like Spigot and Bukkit) data packs and vanilla features. PaperMC is fairly new to the Minecraft server world but it is regarded as some of the best software for Java Minecraft.
Other PaperMC forks:
There are forks of PaperMC that offer "better performance" than PaperMC and support all the things PaperMC does.
Tuinity: Tuinity is focused on providing better performance at higher player counts. The GitHub and download page can be found here.
Purpur: Purpur is a Tuinity fork with the goal of providing new and interesting configuration options, which allow for creating a unique gameplay experience not seen anywhere else. This would mean there are more settings for you to fine-tune your server but PaperMC still does have a lot of options in
Yatopia: This one is controversial. Yatopia aims to provide the best of all the PaperMC forks for the "best in class performance". Yatopia used to be regarded as a poorly coded mash-up of all the paper forks but in recent times they have got better developers working on it and functions properly now. If you go with Yatopia you get a lot of config options from Bukkit, Spigot, PaperMC, Tunity, and Purpur. Yatopia is an option if you really want to try and get the "best performance" possible, however, be prepared for people to say Yatopia is a bad choice. If you decide you don't like it, you can go back to any other fork or PaperMC with the only data loss being the config.yml files that don't exist in a lower fork.
Plugins and Other Information:
Here is a list of the plugin websites in corresponding order with the server software on this article.
Vanilla: Datapacks only.
Bukkit (and above forks): https://dev.bukkit.org/bukkit-plugins
Spigot (and above forks): https://www.spigotmc.org/resources/ (most active site).
Curseforge (Bukkit and above): https://www.curseforge.com/minecraft/bukkit-plugins