A conferência CppCon 2019 foi o local para a realização de um grande anúncio da Microsoft, bem nela lançou o lançamento do código-fonte da biblioteca STL Padrão C ++ incluído no Visual C ++ que, a partir do anúncio, está disponível sob uma licença gratuita, especificamente Apache 2.0 (o que é bastante permissivo).
libcxx, a biblioteca padrão LLVM / Clang C ++, já usa esta licença, o que deve facilitar a troca de código entre projetos. Todo o código-fonte para esta biblioteca está disponível e já compilável com Visual C ++, mas o teste ainda não está incluído.
O projeto aberto deve ser desenvolvido no GitHub e receber solicitações de pull de terceiros com novos recursos e patches. Para se tornar um membro, você deve assinar um contrato de transferência do código CLA.
A equipe MSVC acredita que a migração do STL para o GitHub ajudará os clientes da Microsoft a se manterem atualizados com o processo de desenvolvimento, experimentar inovações e ajudar a desenvolver o projeto.
Em vez disso, os desenvolvedores poderão usar implementações out-of-the-box dos novos padrões em outros projetos.
Por exemplo, você pode trocar código com uma biblioteca libc ++ que funciona dentro do projeto LLVM. A Microsoft enfatiza que STL e libc ++ não se fundem, eles ainda são bibliotecas diferentes, com diferentes estruturas e plataformas. No entanto, agora você pode trabalhar em novos recursos para ambas as bibliotecas sem se preocupar com o licenciamento
Esta implementação da biblioteca padrão não pretende competir com as implementações fornecidas pelo GCC ou Clang, por exemplo: o projeto da Microsoft não planeja oferecer suporte a outras plataformas além da Microsoft.
No entanto, os desenvolvedores desejam uma implementação de alta qualidade: compatível com os padrões e muito rápida.
A compatibilidade binária é garantida com as versões do Visual C ++ 2015 e 2017 (Esta biblioteca é a fornecida com a versão 2019), exceto para os recursos que foram implementados antes da finalização da norma (documentos de trabalho e especificações técnicas The C ++ Standards Committee).
A ramificação WCBF02 (ainda interna da Microsoft) contém alterações incompatíveis no nível binário, mas não no nível de origem (para uma atualização de biblioteca padrão, você precisará recompilar seus projetos, não apenas alterar a DLL). Este ramo contém uma série de melhorias e correções e estará disponível publicamente em breve.
Ao contrário de alguns projetos descritos como gratuitos, A Microsoft recomenda relatar defeitos e contribuir para o código do projeto (Neste caso, será necessário assinar um CLA para dar à Microsoft os direitos necessários para a redistribuição das contribuições, especialmente no caso de alteração da licença do projeto, dificuldade que o LLVM enfrenta há vários anos).
Em um futuro próximo, A Microsoft deve adicionar seu conjunto de testes internos ao projeto. A lista de bugs escalada internamente está sendo migrada para o GitHub. No momento, a compilação é feita com o MSBuild, mas uma migração para o CMake está em andamento. A funcionalidade do C ++ 20 está sendo implementada.
Outros componentes do Visual C ++ não devem estar disponíveis para licenças gratuitas. A Microsoft justifica essa escolha declarando que a biblioteca C ++ padrão é bastante independente do compilador (ao contrário da biblioteca C padrão, por exemplo) e que evolui muito rapidamente em comparação com outros componentes do compilador.
O código-fonte STL está localizado agora disponível no Github onde os interessados podem baixá-lo ou examinar seu código.
O repositório GitHub tem todo o código-fonte do produto, um novo sistema de compilação CMake e README com mais informações. A biblioteca está licenciada sob a licença Apache 2.0 (com exceção de alguns binários).
Obviamente, isso não afeta os desenvolvedores que desejam apenas usar o STL, pois está disponível para uso no IDE do Visual Studio. No entanto, os desenvolvedores que desejam participar do desenvolvimento de STL podem fazê-lo usando o repositório GitHub.
A mudança para o GitHub ainda está em andamento, mas o código agora pode ser clonado e compilado.