EggModules
server.mod is anything that affects the live connection to the ircd that does not involve channels
irc.mod is anything that affects live channels and live users on channels.
channels.mod has nothing to do with the live connection and is just userfile/chanfile storage of handles and permissions and flags
the line between server.mod and irc.mod is blurry at times - for example when we receive an AWAY notification we break it down for the channel-users it triggers for, so the message itself has nothing to do with channels but we call it for each channel the user is on, so that's irc.mod. server.mod and irc.mod separation is historical, I wouldn't separate them these days. cross-module stuff is a bit annoying (as opposed to modules calling into the core) because of it, easier if you put it in the "right" spot
channels.mod is .+user, .+chan etc. channels.mod can check and do IRC stuff via server.mod/irc.mod if they are loaded but it does not require it
irc.mod requires channels.mod and server.mod. server.mod can works without channels.mod and irc.mod