I wonder if it is wise to cling to the ICS protocol. This protocol is basically a legacy from the time that Telnet was the dominant tool for accessing other sites on the internet. As soon as graphical interfaces replaced ascii terminals on PCs, graphical ICS clients like WinBoard were developed. But for general internet access people switched to web browsers. The need to download dedicated clients for ICS play is in practice a large barrier. That FICS is still popular is mostly due to the fact that people can connect with it through Jin, a browser-based (Java) client.
Also note the original ICS protocol with its 2D ascii boards was extremely client-unfriedly, so that ICS implemented a second format (as 'protocol within a protocol') for communicating with dedicated clients ('board 12'). Now FICS and ICC each have their own dedicated methods for communicating with clients for the more advanced functions, (such as updating seek graphs), in addition to the legacy protocol.
If you have to support multiple protocols, it could be better to adopt a protocol that makes browser-based access for human players and observers easy. In addition to that you can support the board-12 protocol plus a few legacy ICS commands used by the existing ICS clients like WinBoard. It would be an advantage to have a different protocol for connecting clients that could possibly support engines as for connecting human players, as using the same protocol for both would make cheating so much easier.
Of course I am mainly interested in this for the purpose of general variant support. For orthodox Chess there will be near-zero demand for new server software. Note there already exists Lichess (
https://github.com/ornicar/lila/ ) as open-source project. Note that the largest part of an ICS deals with user identification, opponent selection, game-database management, user communication and such general tasks. Only a very tiny portion is game-related code (such as parsing moves and checking their legality). Supporting 100 variants instead of 1 would probably drive up the amount of needed code by only 1% or so (if done properly).