Согласен, что делать универсальный API сложно из-за разных версий и условий. Но если грамотно выделить разветвления в отдельный модуль, то можно минимизировать хаос и не потерять контроль над кодом. Главное — не пытаться охватить всё сразу, а делать постепенно и не строить суперсложных конструкций.
Всё про универсалку по SAMP — реально вынос мозга, если пытаться сразу охватить все версии. Лучше сделать простой слой абстракции, где только версии и различия, а остальной код пусть работает без заморочек. Тогда и поддерживать легче, и багов меньше, чем когда всё смешано в одну кучу. Круто, если это не превращается в набор бесконечных условий.