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, Rust, React e o EcmaScript.
É 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!
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 implementação 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 implementação 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 seja realizada.
- Impacto da RFC: Neste tópico você apresenta como sua RFC vai impactar o ecossistema do PHP, o impacto no modo 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 implementação no site do PHP.
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 implementaçã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 uma 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 [email protected] apresentando sua 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 tirar sua RFC do status "Em discussão" e levar para o status de "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.
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 e-mail para a lista interna seguindo o seguinte padrão: [VOTE] {RFC Title} no assunto do e-mail.
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.
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 ser determinando para diversos problemas em todo o ecossistema!
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.
- Líderes de desenvolvimento de ferramentas que utilizam PHP (frameworks, bibliotecas, CMSs e afins).
- Participantes regulares das discussões internas.
Caso o criador da RFC se enquadre em uma das categorias apresentadas acima ele possui direito de voto.
Caso a sua RFC seja negada, 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.
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:
- adicionar pessoas da comunidade brasileira que são votantes nas RFCs
- malukenho (Jefferson Nathan)
- geekcom (Daniel)
- adiel (Adiel Cristo)
- galvao (Er Galvão)
- caruso (Gabriel Caruso)
- duodraco (Anderson Casimiro)
- guilhermeblanco (Guilherme Blanco)
- klaussilveira
- rdohms (Rafal Dohms)
- lcobucci (Luis Cobucci)
- https://people.php.net/
- https://php-rfc-watch.beberlei.de/
- https://php.watch/rfcs (blog de novidades)
- externals.io
- PHP Internals: Primeiros Passos - Adiel Cristo - https://youtu.be/jlmHY3tVGuw?list=PLiWHHufbVh1h57flC7G5C45iCwnJMHyvQ
- Contribuindo com o core do PHP: Testes - https://youtu.be/a7H5N-qbx7A