Skip to content

Commit

Permalink
Add FAQ page (#33)
Browse files Browse the repository at this point in the history
  • Loading branch information
damianstasik authored Sep 7, 2023
1 parent 29d2b05 commit 4156067
Show file tree
Hide file tree
Showing 5 changed files with 128 additions and 54 deletions.
2 changes: 1 addition & 1 deletion docusaurus.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ const config = {
},
{
label: "FAQs",
href: "#",
href: "/faq",
},
{
label: "Blog",
Expand Down
54 changes: 54 additions & 0 deletions faq.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
<AccordionItem summary="Is OpenTF going to be a foundation?" open highlight>

We strongly prefer joining an existing reputable foundation over creating a
new one. Stay tuned for additional details in the coming week.

</AccordionItem>

<AccordionItem summary="Can anyone pledge?" highlight>

Under a well-known and widely-accepted license that companies can trus, that
won’t suddenly change in the future, and isn’t subhect to the whims of a singe
vendor. Under a well-known and widely-accepted license that companies can
trus, that won’t suddenly change in the future, and isn’t subhect to the whims
of a singe vendor.

</AccordionItem>

<AccordionItem summary="I'm a regular Terraform user, and I'm not competing with HashiCorp. Why should I care?">

How do you know you're not competing with HashiCorp?

That's not meant to be a redundant or snarky question. The key issue with the BUSL is that the wording is intentionally vague. What does "competing" mean? What does "hosting or embedding" mean? Who decides?

The answer to all these questions is that, in order to really know if you're a competitor, you have to reach out to HashiCorp. So whether your usage is valid is not controlled by the terms of the license, but is instead entirely at the whim of HashiCorp. They get to decide on a case-by-case basis who is and who isn't a competitor—and they can change their mind at any time.

That is a very shaky footing on which to build anything.

At every company you ever work at in the future, before starting to use Terraform, the CTO will have to think about whether HashiCorp could possibly consider you a competitor, now or at any time in the future. The legal team at that company will have to wonder if they want to take the risk of allowing a BUSL license or if they should ban it due to all the uncertainty. Every developer at that company will have to wonder if they want to contribute back to Terraform, given there's no certainty they'll be able to use their own work at a future job.

In short, the BUSL is a poison pill for the entire Terraform community.

</AccordionItem>

<AccordionItem summary="Doesn't forking hurt the whole community? Why take such a brash action?" highlight>

Terraform was under the MPL license for ~9 years. This created an understanding—an implicit contract—that Terraform is open-source and you can use it for just about anything you want. Based on that understanding, tens of thousands of developers adopted the tool and contributed back to it. HashiCorp even had all contributors sign a CLA which explicitly said ([link to the CLA in the Internet Archive as HashiCorp](https://web.archive.org/web/20230610041432/https://www.hashicorp.com/cla) has of course removed this wording):

> HashiCorp is committed to having a true Free and Open Source Software (“FOSS”) license for our non-commercial software. A CLA enables HashiCorp to safely commercialize our products while keeping a standard FOSS license with all the rights that the license grants to users: the ability to use the project in their own projects or businesses, to republish modified source, or to fork the project completely.
The move to BUSL—which is _not_ a free and open source license—broke the implicit contract. That was the brash action!

Terraform would've never gotten the adoption it did, or all the contributions from the community had it not been open-source. Most of us would've never agreed to the CLA to contribute to the project if it was BUSL licensed. Taking all those contributions and all that community trust, and then changing to the BUSL license is a bait and switch.

The OpenTF manifesto is about _undoing_ those changes! It's about going back to the way Terraform was for the first ~9 years: as a truly open-source tool that we can all trust, contribute to, and use as we wish.

</AccordionItem>

<AccordionItem summary="HashiCorp deserves to earn a return on their investment. What's wrong with that?">

When any company releases their tool as open source, the contract with the community is always the same: Anyone can use this code, but we the creators hold a privileged position of being at the epicenter of the ecosystem. Vendors then compete to offer the best solution, and the creators enjoy a unique competitive advantage.

We believe that HashiCorp should earn a return by leveraging its unique position in the Terraform ecosystem to build a better product, not by outright preventing others from competing in the first place.

</AccordionItem>
34 changes: 10 additions & 24 deletions src/components/Accordion/Item.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ type AccordionItemProps = {
children: React.ReactNode;
summary: string;
open?: boolean;
highlight?: boolean;
};

const AccordionItem = ({ summary, open, children }: AccordionItemProps) => {
Expand All @@ -25,43 +26,28 @@ const AccordionItem = ({ summary, open, children }: AccordionItemProps) => {
>
<summary
onClick={handleItemClick}
className="list-none py-6 px-6 group-open:pb-0 text-xl flex cursor-pointer flex-row items-center justify-between font-medium marker:[font-size:0px]"
className="list-none py-6 px-6 group-open:pb-0 text-xl flex cursor-pointer flex-row items-center justify-between font-medium marker:[font-size:0px]"
>
{summary}
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="25"
viewBox="0 0 24 25"
viewBox="0 0 24 24"
fill="none"
className="h-6 w-6 rotate-0 transform text-gray-400 block group-open:hidden"
className="h-6 w-6"
>
<path
fillRule="evenodd"
clipRule="evenodd"
d="M12 2.35271C12.4418 2.35271 12.8 2.71088 12.8 3.15271V11.3527H21C21.4418 11.3527 21.7999 11.7109 21.7999 12.1527C21.7999 12.5945 21.4418 12.9527 21 12.9527H12.8V21.1527C12.8 21.5945 12.4418 21.9527 12 21.9527C11.5581 21.9527 11.2 21.5945 11.2 21.1527V12.9527H2.99995C2.55812 12.9527 2.19995 12.5945 2.19995 12.1527C2.19995 11.7109 2.55812 11.3527 2.99995 11.3527H11.2V3.15271C11.2 2.71088 11.5581 2.35271 12 2.35271Z"
fill="#0C192B"
d="M11.8 2a.8.8 0 0 1 .8.8V11h8.2a.8.8 0 0 1 0 1.6h-8.2v8.2a.8.8 0 0 1-1.6 0v-8.2H2.8a.8.8 0 0 1 0-1.6H11V2.8a.8.8 0 0 1 .8-.8Z"
className="block group-open:hidden fill-gray-900"
/>
</svg>
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="25"
viewBox="0 0 24 25"
fill="none"
className="h-6 w-6 rotate-0 transform text-gray-400 hidden group-open:block"
>
<path
fillRule="evenodd"
clipRule="evenodd"
d="M11.9999 11.3527C12.4418 11.3527 12.8 11.3527 12.8 11.3527L21 11.3527C21.4418 11.3527 21.7999 11.7109 21.7999 12.1527C21.7999 12.5945 21.4418 12.9527 21 12.9527H12.8C12.8 12.9527 12.4418 12.9527 11.9999 12.9527C11.5581 12.9527 11.2 12.9527 11.2 12.9527H2.99995C2.55812 12.9527 2.19995 12.5945 2.19995 12.1527C2.19995 11.7109 2.55812 11.3527 2.99995 11.3527H11.2C11.2 11.3527 11.5581 11.3527 11.9999 11.3527Z"
fill="#0C192B"
d="M20.8 11a.8.8 0 0 1 0 1.6h-18a.8.8 0 0 1 0-1.6h18Z"
className="hidden group-open:block fill-gray-900"
/>
</svg>
</summary>
<p className="pb-6 px-6 leading-6 mt-2 text-base text-[#5F6671] font-normal">
<div className="pb-6 px-6 leading-6 mt-2 text-base flex flex-col flex-wrap gap-4 text-gray-600 font-normal">
{children}
</p>
</div>
</details>
);
};
Expand Down
50 changes: 21 additions & 29 deletions src/components/FAQ/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@ import React from "react";
import Accordion from "../Accordion";
import AccordionItem from "../Accordion/Item";
import Button from "../Button";
import Faq from "../../../faq.mdx";
import { MDXProvider } from "@mdx-js/react";
import Link from "@docusaurus/Link";

export default function FAQ() {
return (
Expand All @@ -12,38 +15,27 @@ export default function FAQ() {
</h3>

<Accordion>
<AccordionItem summary="What is OpenTF?" open>
Under a well-known and widely-accepted license that companies can
trus, that won’t suddenly change in the future, and isn’t subhect to
the whims of a singe vendor. Under a well-known and widely-accepted
license that companies can trust, that won’t suddenly change in the
future, and isn’t subhect to the whims of a singe vendor.
</AccordionItem>
<AccordionItem summary="Why was OpenTF created?">
Under a well-known and widely-accepted license that companies can
trus, that won’t suddenly change in the future, and isn’t subhect to
the whims of a singe vendor. Under a well-known and widely-accepted
license that companies can trust, that won’t suddenly change in the
future, and isn’t subhect to the whims of a singe vendor.
</AccordionItem>
<AccordionItem summary="Can I use OpenTF as a drop-in replacement for Terraform?">
Under a well-known and widely-accepted license that companies can
trus, that won’t suddenly change in the future, and isn’t subhect to
the whims of a singe vendor. Under a well-known and widely-accepted
license that companies can trust, that won’t suddenly change in the
future, and isn’t subhect to the whims of a singe vendor.
</AccordionItem>
<AccordionItem summary="What are the differences between OpenTF and Terraform?">
Under a well-known and widely-accepted license that companies can
trus, that won’t suddenly change in the future, and isn’t subhect to
the whims of a singe vendor. Under a well-known and widely-accepted
license that companies can trust, that won’t suddenly change in the
future, and isn’t subhect to the whims of a singe vendor.
</AccordionItem>
<MDXProvider
components={{
AccordionItem: (props) =>
props.highlight ? <AccordionItem {...props} /> : null,
a: (props) => (
<Link className="text-inherit underline" {...props} />
),
blockquote: (props) => (
<blockquote
className="border-l-4 border-gray-300 text-inherit pl-4"
{...props}
/>
),
}}
>
<Faq />
</MDXProvider>
</Accordion>

<div className="flex justify-center mt-6">
<Button variant="secondaryOnLight" href="/faqs">
<Button variant="secondaryOnLight" href="/faq">
Show More
</Button>
</div>
Expand Down
42 changes: 42 additions & 0 deletions src/pages/faq.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
import React from "react";
import Layout from "@theme/Layout";
import Jumbotron from "../components/Jumbotron";
import Accordion from "../components/Accordion";
import AccordionItem from "../components/Accordion/Item";
import Faq from "../../faq.mdx";
import { MDXProvider } from "@mdx-js/react";
import Link from "@docusaurus/Link";

export default function Manifesto() {
return (
<Layout wrapperClassName="light">
<Jumbotron>
<h1 className="text-5xl md:text-7xl font-bold text-white text-center leading-tight md:leading-snug">
Frequently Asked Questions
</h1>
</Jumbotron>
<div className="bg-white flex-1 text-gray-900">
<div className="container mx-auto pt-6 pb-10">
<Accordion>
<MDXProvider
components={{
AccordionItem,
a: (props) => (
<Link className="text-inherit underline" {...props} />
),
blockquote: (props) => (
<blockquote
className="border-l-4 border-gray-300 text-inherit pl-4"
{...props}
/>
),
}}
>
<Faq />
</MDXProvider>
</Accordion>
</div>
</div>
</Layout>
);
}

0 comments on commit 4156067

Please sign in to comment.