Le développeur PHP Edmond Dantes a lancé la discussion autour d'une nouvelle RFC intitulée « Concurrency Support in the PHP Engine » (wiki.php.net/rfc/async_scheduler_abi). La proposition dote le moteur Zend d'une représentation native des coroutines et d'un composant ordonnanceur (scheduler) interchangeable, pouvant être implémenté par une extension. Elle n'ajoute aucune classe, fonction, constante ni syntaxe côté PHP ; sans planificateur enregistré, le comportement de PHP reste identique à aujourd'hui.

Cette RFC n'est explicitement pas la RFC « True Async » précédemment discutée, mais un noyau minimal extrait de ce travail au niveau du moteur. Elle définit un contrat d'activation, des notifications émises par le moteur, un mécanisme permettant à un planificateur d'adopter des fibers, ainsi qu'un stockage propre à chaque coroutine. Les API destinées aux développeurs, comme spawn(), await() ou les canaux (channels), resteraient du ressort des extensions ; True Async ne serait qu'un fournisseur possible construit sur cette base.

Une implémentation fonctionnelle existe déjà sous forme de pull request php/php-src#22561 sur GitHub, également soumise par Dantes. Elle comprend une extension de planificateur de référence intégrée à l'arborescence, ext/test_scheduler, désactivée par défaut, qui remplit chaque emplacement du planificateur via du code d'extension ordinaire ; les suites de tests existantes de PHP s'exécuteraient sans modification, sans planificateur, dans le même binaire. Une extension pont distincte, hors dépôt, implémentant un planificateur en PHP pur, sert de preuve que l'interface proposée est suffisante.

Pour les bibliothèques asynchrones existantes, la conception permet à un planificateur d'adopter des fibers déjà créés par ReactPHP, Revolt ou AMPHP, fiber par fiber et de façon optionnelle. Le nouveau stockage par coroutine vise à terme à rendre des fonctions comme ob_start() sûres pour les coroutines. Dantes souligne que la proposition n'introduit ni goroutines ni véritable parallélisme : l'exécution reste confinée à un seul thread du système d'exploitation.