Differences Between Forge And Bukkit
Thanks to diesieben07 for this explanation:
Overall the fundamental approach is different between Bukkit and Forge. Bukkit is an API which is (in theory) not limited to Minecraft. Then there is an implementation of that API for the Minecraft server, which is CraftBukkit. At no point ever do you get in touch with the actual Minecraft code, you just use Bukkit. With Forge, you work both with Forge code, but also with the actual Minecraft code, possibly patched by Forge. That requires you to update your mod every the Minecraft version, which is not the case for Bukkit plugins.
Unlike Bukkit, with Forge there is no Maven repo for Forge as a dependency and you need to use Gradle. Why? Forge is not just a bit of code. Forge requires the original Minecraft source and it needs to be decompiled, deobfuscated and patched. That doesn't work with just a Maven repo. Some of the ForgeGradle (the thing that does the decompilation, etc.) features are based on Maven repos (which Gradle supports natively), but the files in there don't really do anything except in combination with ForgeGradle.
Unlike Bukkit, with Forge there is no common permission system and every mod is taking an own approach. Yes, but there is a PR: https://github.com/MinecraftForge/MinecraftForge/pull/1220