<?php
/**
 * Copyright (c) 2019 Eclipse Foundation.
 *
 * This program and the accompanying materials are made
 * available under the terms of the Eclipse Public License 2.0
 * which is available at https://www.eclipse.org/legal/epl-2.0/
 *
 * Contributors:
 * Eric Poirier (Eclipse Foundation) - Initial implementation
 *
 * SPDX-License-Identifier: EPL-2.0
 */
?>
<div id="maincontent">
  <div id="midcolumn">
    <h1><?php print $pageTitle; ?></h1>
    <p>Version 2.3. Revision History at the end</p>
    <h2>Vision and Scope</h2>
    <p><img src="assets/images/wg_sparkplug-logo.png" align="left" class="padding-right-10">

      The <strong>Eclipse Sparkplug Working Group</strong> will drive the evolution and broad
      adoption of the Eclipse Sparkplug protocol and related technologies that enable the creation
      of open, interoperable, Industrial IoT (IIoT) solutions.
    </p>
    <p>In particular, the Working Group will encourage the definition of technical specifications
      and associated implementations that rationalize access to industrial data, improve the
      interoperability and scalability of IIoT solutions, and provide an overall framework for
      supporting Industry 4.0.</p>
    <p>The Working Group will:</p>
    <ul>
      <li>Promote the &quot;Eclipse Sparkplug&quot; brand and its value in the marketplace.</li>
      <li>Provide vendor neutral marketing and other services to the Eclipse Sparkplug ecosystem.</li>
      <li>Leverage the Eclipse Foundation Specification Process to formalize the specifications that are defined
        within the scope of this working group.</li>
      <li>Define compatibility rules and a compatibility and branding process for implementations of
        these specifications to ensure application portability.</li>
      <li>Leverage Eclipse-defined licensing and intellectual property flows that encourage community participation,
        protect community members, and encourage usage.</li>
      <li>Manage the overall technical and business strategies related to its open source projects.</li>
      <li>Establish and drive a funding model that enables this working group and its community to
        operate on a sustainable basis.</li>
      <li>Manage the overall technical and business strategies for Eclipse Tahu and related projects.</li>
    </ul>
    <p>All Members must be parties to the Eclipse Foundation Membership Agreement, including the
      requirement set forth in Section 2.2 to follow the Bylaws and then-current policies of the
      Eclipse Foundation, including but not limited to the Intellectual Property and Antitrust
      Policies.</p>
    <h2>Governance and Precedence</h2>
    <h3>Applicable Documents</h3>
    <ul>
      <li><a href="/org/documents/eclipse_foundation-bylaws.pdf">Eclipse Bylaws</a></li>
      <li><a href="/org/workinggroups/industry_wg_process.php">Industry Working Group Process</a></li>
      <li><a href="/org/documents/eclipse_membership_agreement.pdf">Eclipse Membership Agreement</a></li>
      <li><a href="/org/documents/Eclipse_IP_Policy.pdf">Eclipse Intellectual Property Policy</a></li>
      <li><a href="/org/documents/Eclipse_Antitrust_Policy.pdf">Eclipse Antitrust Policy</a></li>
      <li><a href="/projects/dev_process/development_process.php">Eclipse Development Process</a></li>
      <li><a href="/projects/efsp/">Eclipse Foundation Specification Process</a></li>
      <li><a href="/org/workinggroups/industry_wg_process.php">Eclipse Foundation Working Group Process</a></li>
      <li><a href="/legal/efsl.php">Eclipse Foundation Specification License</a></li>
      <li><a href="/legal/tck.php">Eclipse Foundation Technology Compatibility Kit License</a></li>
    </ul>
    <p>In the event of any conflict between the terms set forth in this Working Group&#39;s Charter
      and the Eclipse Foundation Bylaws, Membership Agreement, Eclipse Development Process, Eclipse
      Industry Working Group Process, or any policies of the Eclipse Foundation, the terms of the
      Eclipse Foundation Bylaws, Membership Agreement, process, or policy shall take precedence.</p>
    <h2>Membership</h2>
    <p>
      With the exception of Guest members as described below, an entity must be at least a <a
        href="/membership/become_a_member/membershipTypes.php#solutions"
      >Solutions Member</a> of the Eclipse Foundation, have executed the Eclipse Sparkplug
      Participation Agreement once defined, and adhere to the requirements set forth in this Charter
      to participate.
    </p>
    <p>There are three classes of Eclipse Sparkplug working group membership - Strategic,
      Participant, and Guest. Each of these classes is described in detail below.</p>
    <p>The participation fees associated with each of these membership classes is shown in the
      tables in Schedule A. These are annual fees, and are established by the Eclipse Sparkplug
      Steering Committee, and will be updated in this charter document accordingly.</p>
    <p>
      The fees associated with membership in the Eclipse Foundation are separate from any working
      group membership fees, and are decided as described in the <a
        href="/org/documents/eclipse_foundation-bylaws.pdf"
      >Eclipse Bylaws</a> and detailed in the <a
        href="/org/documents/eclipse_membership_agreement.pdf"
      >Eclipse Membership Agreement</a>.
    </p>
    <h2>Classes of Eclipse Sparkplug Membership</h2>
    <h3>Strategic members</h3>
    <p>Strategic Members are organizations that view IIoT standards and technologies as strategic to
      their organization and are investing significant resources to sustain and shape the activities
      of this working group.</p>
    <p>Strategic Members of the Eclipse Sparkplug working group must be at least a Solutions Member
      of the Eclipse Foundation, and have a minimum of 3 developers participating on Eclipse
      Sparkplug projects, and made at least one accepted commit or pull request to a Sparkplug
      project within the last 12months.</p>
    <h3>Participant members</h3>
    <p>Participant Members are typically organizations that deliver products or services based on
      open IIoT standards and technologies, or view IIoT standards and technologies as strategic to
      their organization. These organizations want to participate in the development and direction
      of an open IIoT ecosystem.</p>
    <p>Participant Members of the Eclipse Sparkplug working group must be at least Solutions Members
      of the Eclipse Foundation.</p>
    <h3>Guest members</h3>
    <p>Guest Members are organizations which are Associate members of the Eclipse Foundation who
      have been invited for one year, renewable, by the Steering Committee to participate in
      particular aspects of the activities of the Working Group. Typical guests include R&amp;D
      partners, universities, academic research centers, etc. Guests may be invited to participate
      in committee meetings at the invitation of the respective committee, but under no
      circumstances do Guest members have voting rights. Guest members are required to execute the
      Eclipse Sparkplug Participation Agreement once defined.</p>
    <h2>Membership Summary</h2>
    <table class="table table-bordered">
      <thead>
        <tr>
          <th>&nbsp;</th>
          <th>Strategic Member</th>
          <th>Participant Member</th>
          <th>Guest Member</th>
        </tr>
      </thead>
      <tbody>
        <tr>
          <td>Member of the Steering Committee</td>
          <td>Appointed</td>
          <td>Elected</td>
          <td>N/A</td>
        </tr>
      </tbody>
    </table>
    <h2>Governance</h2>
    <p>This Eclipse Sparkplug working group is designed as:</p>
    <ul>
      <li>a member driven organization,</li>
      <li>a means to foster a vibrant and sustainable ecosystem of components and service providers,</li>
      <li>a means to organize the community of each project or component so that users and
        developers define the roadmap collaboratively.</li>
    </ul>
    <p>In order to implement these principles, the Steering Committee has been defined (also
      referred to as the &quot;Body&quot; below) as described below:</p>
    <h2>Steering Committee</h2>
    <h3>Powers and Duties</h3>
    <p>Steering Committee members are required to:</p>
    <ul>
      <li>Define and manage the strategy of the working group.</li>
      <li>Define and manage which Eclipse Foundation projects are included within the scope of this
        working group. This will require acceptance of the specification process by these projects.</li>
      <li>Define and manage the roadmaps.</li>
      <li>Review and approve this charter.</li>
      <li>Review and approve the participation agreement.</li>
      <li>Define and approve the specification process to be used by the Sparkplug specifications.</li>
      <li>Ensure that all Specification Projects operate in an open, transparent, and vendor-neutral
        fashion in compliance with the Specification Process.</li>
      <li>Approve specifications for adoption by the community.</li>
      <li>Work with the Eclipse IoT Project Management Committee (IoT PMC) to ensure that the
        specification process is complied with by all Sparkplug specification projects.</li>
      <li>Review and approve the trademark policy to ensure compatibility of independent
        implementations of specifications.</li>
      <li>Define the trademark policy and Trademark Usage Guidelines to be used by the Sparkplug
        specifications.</li>
      <li>Ensure the consistency of logo usage and other marketing materials.</li>
      <li>Define the budget and fees for all classes of working group membership each year.</li>
      <li>Invite Guest members to participate in the working group.</li>
    </ul>
    <h3>Composition</h3>
    <ul>
      <li>Each Strategic Member of the working group has a seat on the Steering Committee.</li>
      <li>One seat is allocated to Participant Members. Participant Member seats are allocated
        following the Eclipse &quot;Single Transferable Vote&quot;, as defined in the Eclipse
        Bylaws.</li>
    </ul>
    <h3>Meeting Management</h3>
    <p>The Steering Committee meets at least twice a year.</p>
    <h2>Specification Committee</h2>
    <h3>Powers and Duties</h3>
    <p>Specification Committee members are required to:</p>
    <ul>
      <li>Define the specification process to be used by all Sparkplug specifications, and refer to it for approval by the Steering Committee.</li>
      <li>Ensure that all specification expert groups operate in an open, transparent, and vendor-neutral fashion in compliance with the specification process.</li>
      <li>Approve specifications for adoption by the community. </li>
      <li>Approve profiles which define collections of specifications which meet a particular market requirement.</li>
      <li>Work with the Eclipse IoT Project Management Committee (Eclipse IoT PMC) to ensure that the specification process is complied with by all Sparkplug working group specification projects.</li>
    </ul>
    <h3>Composition</h3>
    <ul>
      <li>Each Strategic Member of the working group has a seat on the Specification Committee.</li>
      <li>One seat is allocated to Participant Members. Participant Member seats are allocated following the Eclipse "Single Transferable Vote", as defined in the Eclipse Bylaws.</li>
      <li>Guest members that have been invited by the Sparkplug Steering Committee as observers.  Guest members have no voting rights.</li>
      <li>Any additional individuals as designated from time to time by the Executive Director.</li>
      <li>The Committee elects a chair who reports to the Steering Committee. This chair is elected among the members of the Committee. They will serve from April 1 to March 31 of each calendar year, or until their successor is elected and qualified, or as otherwise provided for in this Charter.</li>
    </ul>
    <h3>Meeting Management</h3>
    <p>The Specification Committee meets at least once per quarter.</p>
    <h2>Common Dispositions</h2>
    <p>The dispositions below apply to all governance bodies for this working group, unless
      otherwise specified. For all matters related to membership action, including without
      limitation: meetings, quorum, voting, electronic voting action without meeting, vacancy,
      resignation or removal, the terms set forth in Section 6 of the Eclipse Foundation Bylaws
      apply.</p>
    <h3>Good Standing</h3>
    <p>A representative shall be deemed to be in Good Standing, and thus eligible to vote on issues
      coming before the Body they participate in, if the representative has attended (in person or
      telephonically) a minimum of three (3) of the last four (4) Body meetings (if there have been
      at least four meetings). Appointed representatives on the Body may be replaced by the Member
      organization they are representing at any time by providing written notice to the Steering
      Committee. In the event a Body member is unavailable to attend or participate in a meeting of
      the Body, they may send a representative and may vote by proxy, which shall be included in
      determining whether the representative is in Good Standing. As per the Eclipse Foundation
      Bylaws, a representative shall be immediately removed from the Body upon the termination of
      the membership of such representative&rsquo;s Member organization.</p>
    <h3>Voting</h3>
    <p>For actions (i) requesting that the Eclipse Foundation Board of Directors approve a
      specification license; (ii) approving specifications for adoption; (iii) amending the terms of
      the working group&rsquo;s Participation agreement; (iv) approving or changing the name of the
      working group; and (v) approving changes to annual Member contribution requirements; any such
      actions must be approved by no less than two-thirds (2/3) of the representatives in Good
      Standing represented at a committee meeting at which a quorum is present.</p>
    <h3>Term and Dates of elections</h3>
    <p>All representatives shall hold office until their respective successors are appointed or
      elected, as applicable. There shall be no prohibition on re-election or re-designation of any
      representative following the completion of that representative&rsquo;s term of office.</p>
    <h4>Strategic Members</h4>
    <p>Strategic Members Representatives shall serve in such capacity on committees until the
      earlier of their removal by their respective appointing Member organization or as otherwise
      provided for in this Charter.</p>
    <h4>Elected representatives</h4>
    <p>Elected representatives shall each serve one-year terms and shall be elected to serve from
      April 1 to March 31 of each calendar year, or until their respective successors are elected
      and qualified, or as otherwise provided for in this Charter. Procedures governing elections of
      Representatives may be established pursuant to resolutions of the Steering Committee provided
      that such resolutions are not inconsistent with any provision of this Charter.</p>
    <h3>Meetings Management</h3>
    <h4>Place of meetings</h4>
    <p>All meetings may be held at any place that has been designated from time-to-time by
      resolution of the corresponding Body. All meetings may be held remotely using phone calls,
      video calls or any other means as designated from time-to-time by resolution of the
      corresponding Body.</p>
    <h4>Regular meetings</h4>
    <p>No Body meeting will be deemed to have been validly held unless a notice of same has been
      provided to each of the representatives in Good Standing at least thirty (30) calendar days
      prior to such meeting, which notice will identify all potential actions to be undertaken by
      the Body at the Body meeting. No representative will be intentionally excluded from Body
      meetings and all representatives shall receive notice of the meeting as specified above;
      however, Body meetings need not be delayed or rescheduled merely because one or more of the
      representatives cannot attend or participate so long as at least a quorum of the Body is
      represented at the Body meeting. Electronic voting shall be permitted in conjunction with any
      and all meetings of the Body the subject matter of which requires a vote of the Body to be
      delayed until each such representative in attendance thereat has conferred with his or her
      respective Member organization as set forth in Section Voting above.</p>
    <h4>Actions</h4>
    <p>The Body may undertake an action only if it was identified in a Body Meeting notice or
      otherwise identified in a notice of special meeting.</p>
    <h3>Invitations</h3>
    <p>The Body may invite any member to any of its meetings. These invited attendees have no right
      of vote.</p>
    <h3>Sparkplug Working Group Annual Participation Fees Schedule A</h3>
    <p>The following fees have been established by the Sparkplug Steering Committee. These fees are
      in addition to each participant&rsquo;s membership fees in the Eclipse Foundation.</p>
    <h4>Sparkplug Strategic Member Annual Participation Fees</h4>
    <p>Strategic members are required to execute the Sparkplug Participation Agreement.</p>
    <p>Strategic members are required to commit to three (3) years of membership.</p>
    <table class="table table-bordered">
      <thead>
        <tr>
          <th>Corporate Revenue</th>
          <th>Annual Fees</th>
        </tr>
      </thead>
      <tbody>
        <tr>
          <td>Annual Corporate Revenues greater than $1 billion</td>
          <td>$20,000</td>
        </tr>
        <tr>
          <td>Annual Corporate Revenues greater than $500 million but less than or equal to $1
            billion</td>
          <td>$15,000</td>
        </tr>
        <tr>
          <td>Annual Corporate Revenues greater than $100 million but less than or equal to $500
            million</td>
          <td>$10,000</td>
        </tr>
        <tr>
          <td>Annual Corporate Revenues greater than $10 million but less than or equal to $100
            million</td>
          <td>$5,000</td>
        </tr>
        <tr>
          <td>Annual Corporate Revenues less than or equal to $10 million</td>
          <td>$1,500</td>
        </tr>
      </tbody>
    </table>
    <h4>Sparkplug Participant Member Annual Participation Fees</h4>
    <p>Participant members are required to execute the Sparkplug Participation Agreement.</p>
    <table class="table table-bordered">
      <thead>
        <tr>
          <th>Corporate Revenue</th>
          <th>Annual Fees</th>
        </tr>
      </thead>
      <tbody>
        <tr>
          <td>Annual Corporate Revenues greater than $1 billion</td>
          <td>$10,000</td>
        </tr>
        <tr>
          <td>Annual Corporate Revenues less than or equal to $1 billion but greater than $10
            million</td>
          <td>$5,000</td>
        </tr>
        <tr>
          <td>Annual Corporate Revenues less than or equal to $10 million</td>
          <td>$500</td>
        </tr>
      </tbody>
    </table>
    <h4>Sparkplug Guest Member Annual Participation Fees</h4>
    <p>Guest members pay no annual fees, but are required to execute the Sparkplug Participation
      Agreement.</p>
    <hr />
    <p>Charter Version History</p>
    <ul>
      <li>v1.0 created Nov 27, 2018.</li>
      <li>v2.0 created Dec 5, 2018</li>
      <li>v2.1 created Dec 14, 2018</li>
      <li>v2.2 created Feb 13, 2019</li>
      <li>v2.3 created Feb 26, 2020
        <ul>
        	<li>Approved by the Steering Committee March 19, 2020</li>
        </ul>
      </li>
    </ul>
  </div>
</div>