O que são RFCs e como elas funcionam na linguagem PHP
Tags: php, opensource, programming
Published: 2022-01-10 12:10:56

## O que é sobre RFC
Você como uma pessoa desenvolvedora é, sem dúvidas, atenta nas novidades das tecnologias que você utiliza no dia a dia. Mas você já se perguntou como funciona para alguma pessoa dar sugestão de um novo método, uma nova funcionalidade ou até mesmo alteração em alguma tecnologia?

Isso é possível utilizando um padrão adotado pela maioria das linguagens chamado RFC ou Request For Comments. Se formos traduzi-lo, significa "Pedidos para Comentários". Esta mecânica é utilizada em muitas tecnologias como por exemplo [PHP](https://wiki.php.net/rfc), [Rust](https://github.com/rust-lang/rfcs), [React](https://github.com/reactjs/rfcs) e o [EcmaScript](https://github.com/tc39/proposals).

É valido lembrar que cada tecnologia possui seus próprios padrões de RFC como templates, fases de discussão e votação. O RFC é um conceito que é aplicado em diversos cenários!

## RFCs no PHP

Agora que já sabemos o que é RFC, vamos entender como ela funciona no ecossistema do PHP.

No PHP as RFCs seguem um **template** e o fato de haver um template é interessante para seguir uma linha lógica e conseguir _padronizar o processo_.

No **template** do PHP é sugerido os seguintes campos:

- **Introdução:** Apresentar a ideia geral da proposta da RFC.
- **Proposta:** Apresentar a implementação da sua proposta, como vai ser utilizada no dia a dia em forma de código com exemplos e afins.
- **Alterações incompatíveis com versões anteriores:** caso sua nova funcionalidade seja incompatível com alguma versão anterior do PHP deve se apresentar a incompatibilidade e em quais versões isso ocorre.
- **Proposta de Implementação na versão do PHP:** Neste campo você apresenta a partir de qual versão do PHP sua implementação será realizada. 
- **Impacto da RFC:** Neste tópico você apresenta como sua RFC vai impactar o ecossistema do PHP, o impacto no CLI, no modo Web, no core do PHP, no arquivo de configuração do PHP (php.ini) e até mesmo se terá a criação de novas constantes.
- **Tarefas Abertas:** apenas um alerta para você verificar de realmente ter terminado sua implementação antes da votação começar.
- **Patches e Testes:** Neste campo você pode vincular o link do seu Pull Request no GitHub junto com os testes apresentados. 


É valido lembrar que é muito importante _detalhar a RFC_ e propostas de implementação com o máximo de informação possível e exemplos. É a partir da RFC que será escrita a **documentação** da sua funcionalidade no site do PHP.

## Processo de uma RFC

Para você **criar uma RFC** ou implementar algo é necessário _ser membro do PHP Wiki_ e já ter contribuído de alguma forma para o PHP. Caso você não seja membro do PHP Wiki você pode solicitar para que um membro seja _co-autor da RFC_ com você.

Antes mesmo de criar sua RFC, é necessário apresentar sua solução, quem vai implementá-la e se é uma implementação ou apenas um conceito de implementação para a **lista interna** de membros do PHP.

O envio deste e-mail permite que as pessoas do grupo **validem** sua ideia e vejam se a ideia é realmente interessante para o linguagem PHP e, caso você não receba nenhum feedback negativo, você pode começar a desenvolver sua implementação.

Todo o **processo de criação** da RFC acontece dentro do próprio PHP Wiki, seguindo o template já apresentado neste artigo. Para iniciar a escrita da sua RFC basta:


- Faça login no wiki com sua conta wiki.
- Navegue para um URL como https://wiki.php.net/RFC/my_RFC (use o nome do seu recurso no URL).
- Pressione o botão “Editar esta página”, preencha o modelo fornecido e salve.
- Edite https://wiki.php.net/RFC e vincule seu RFC com o status “Em rascunho”.
- Escreva o RFC.

Após ter terminado de escrever sua RFC é necessário seguir os seguintes passos:

- Mude o status da sua página RFC para **“Em discussão”**.
- Mude sua seção em https://wiki.php.net/RFC para **“Em discussão”**.
- Envie um e-mail para internals@lists.php.net apresentando seu RFC.

Após o envio de sua RFC para a lista você poderá receber **feedbacks** de correções, problemas e melhores implementações. Escute estes feedbacks e atualize sua RFC com os pontos negativos e positivos. Sempre que responder um e-mail referente a sua RFC não esqueça de vincular a URL da RFC!

Para **colocá-la em votação** é necessário considerar o tempo mínimo de duas semanas a partir da data que você enviou a sua RFC para a lista interna. É importante ter certeza que não tem mais nenhuma discussão aberta sobre sua RFC antes de ela ir para votação, caso tenha algo aberto isso poderá dificultar a aprovação.

Caso tudo esteja correto, é necessário alterar o status da sua RFC para votação e adicionar a Macro de Votação em sua RFC, o exemplo da macro está no site oficial do PHP.

Após realizar essas alterações e colocar sua RFC para votação é necessário colocar o **período de votação** com a _data de início, data de fim e o timezone_, é valido lembrar que o período de votação é de, no mínimo, de **duas semanas**.

Por fim é necessário enviar um outro email para a lista interna seguindo o seguinte padrão: **[VOTE] {RFC Title}** no assunto do e-mail. 


## Sistema de votação das RFC's no PHP.

Como dito anteriormente, o período de votação de uma RFC é de, no mínimo, duas semanas a partir da data em que ela foi divulgada na lista interna com o e-mail de abertura de votação. Este prazo mínimo pode ser aumentado conforme necessidade mas nunca pode ser diminuído!

_Para sua RFC ser aprovada é necessário 2/3 de votos positivos. Existem alguns casos onde a RFC pode ser muito "polêmica" e este sistema de votação ser alterado._

## Quem são as pessoas que podem votar! 

O PHP é uma linguagem utilizada por milhares de pessoas em todo mundo e por isso é necessário ouvir seus representantes tanto de comunidades, quanto criadores de frameworks e afins.

Uma implementação errada no PHP pode ocasionar **inúmeros problemas** em todo o ecossistema!

Pelas razões apresentadas anteriormente podem votar para as decisões de RFC: 

- Pessoas com contas VCS no php.net ou seja pessoas que contribuíram com código para o PHP.
- Representantes de comunidades PHP que são indicados por pessoas com contas VCS no php.net.
- Lideres de desenvolvimento de ferramentas que utilizam PHP (Frameworks, Bibliotecas, CMS e afins).
- Participantes regulares das discussões internas.

Algo bem legal é que temos alguns brasileiros que podem votar para as decisões de RFC, sendo eles:

- [Jefferson Nathan](https://twitter.com/malukenho)
- [Daniel Rodrigues](https://twitter.com/geekcom2)
- [Adiel Cristo](https://twitter.com/adielcristo)
- [Er Galvão Abbott](https://twitter.com/galvao)
- [Gabriel Caruso](https://github.com/carusogabriel)
- [Anderson Casimiro](https://twitter.com/casimiroarruda)
- [Guilherme Blanco](https://twitter.com/guilhermeblanco)
- [Klaus Silveira](https://twitter.com/klaussilveira)
- [Rafael Dohms](https://twitter.com/rdohms)
- [Luís Otávio Cobucci](https://twitter.com/lcobucci)

_Caso o criador da RFC se enquadre em uma das categorias apresentadas acima ele possui direito de voto._


## Minha proposta foi recusada e agora ?

Caso a sua RFC seja recusada, não se preocupe! Isso é bem comum de acontecer. Um exemplo disso é a proposta para a implementação de _enumerations no PHP_. Antes de ser aprovada no PHP 8.1, foram submetidas duas outras propostas anteriores que não foram aprovadas.

Para **reapresentar sua proposta** é necessário que ao menos um desses fatores aconteça: 

- 6 meses se passaram a partir do momento da votação anterior  OU
- O(s) autor(es) realizaram alterações substanciais na proposta. 

Embora seja impossível definir o que são mudanças 'substanciais', elas devem ser materiais o suficiente para que afetem significativamente o resultado de outra votação.

## Fique por dentro!

Caso você tenha interesse em saber mais sobre o assunto de RFCs e acompanhar tudo que acontece dentro do PHP, indico os seguintes sites:

- [externals.io](externals.io): este site contém todas as discussões da lista interna de e-mails do PHP, dessa forma fica mais fácil de ver as discussões e entender o que está sendo debatido

- [RFC Watch](https://php-rfc-watch.beberlei.de/): este site apresenta em tempo real todos os status das RFCs, como quantos votos receberam e afins.

- [Blog de Novidades](https://php.watch/rfcs): este é um blog com todas as novidades sobre RFCs, juntamente com informações úteis como status, prazos e números de votos.

Por fim, se você chegou até esta parte do artigo espera que tenha gostado! Este é um assunto bem importante do ecossistema de PHP mas pouco difundido na comunidade brasileira! Gostaria de pedir para que você compartilhe em suas redes sociais e nas comunidades a qual você faz parte.

Gostaria também de agradecer aos revisores deste artigo, que me ajudaram com seu conhecimento técnico sobre o assunto.

Revisores: 

- [Marcel Santos](https://twitter.com/marcelgsantos).
- [Daniel Rodrigues](https://twitter.com/geekcom2).