<?php
/**
 * Copyright (c) 2005, 2020 Eclipse Foundation and others.
 *
 * This program and the accompanying materials are made available
 * under the terms of the Eclipse Public License 2.0 which accompanies
 * this distribution, and is available at http://eclipse.org/legal/epl-2.0
 *
 * SPDX-License-Identifier: EPL-2.0
 */
?>

<div id="maincontent">
	<div id="midcolumn">
		<h1><?php echo $pageTitle; ?></h1>
		<p>This document provides guidelines for user groups that are based on
			Eclipse Foundation projects and/or working groups. These user groups
			may leverage one or more Eclipse Foundation brands (e.g.,
			Eclipse&reg; , Jakarta&reg; , or Tangle&trade; ).</p>
		<p>
			A User Group must first sign the <a
				href="./EclipseUserGroupTrademarkLicenseAgreement-v1.0.pdf">Eclipse
				User Group Trademark License Agreement</a> before using the relevant
			brand. The agreement provides more detail about how the brand can be
			used.
		</p>
		<ul>
			<li>Any User Group must have a focus on an Eclipse Foundation open
				source project and/or a working group community.</li>
			<li>A User Group can be a separate organization, or a subgroup of a
				larger group.</li>
			<li>User Groups should promote free software both within the group
				and in relationships with other organizations.</li>
			<li>User Groups should make an effort to foster a positive message
				about both Eclipse and free software.</li>
			<li>It is necessary for any User Group to have a contact person who
				can act as a representative for the group and who accepts
				responsibility to ensure that the guidelines are followed. If the
				User Group has a president, then the president would be a good
				person to fill this role. For example, this person will be
				responsible to ensure that the User Group follows the requirements
				regarding how to use the Eclipse brand.</li>
			<li>User Group members are expected to follow the Eclipse Foundation
				<a href="/org/documents/Community_Code_of_Conduct.php">Community
					Code of Conduct</a> at functions and interactions.
			</li>
		</ul>
		<p>If a User Group is interested in having its own domain (e.g.
			eclipse.xx), then please contact the Eclipse Foundation to discuss if
			this is possible before registering the domain yourself.</p>
		<p>
			User Groups must follow the <a href="/legal/logo_guidelines.php">Guidelines
				for Eclipse Logos &amp; Trademarks</a>.
		</p>
		<p>
			<br>General questions or inquiries about starting a User Group or to
			discuss a specific matter in relation to a User Group, please email <a
				href="mailto:license@eclipse.org">license@eclipse.org</a>
		</p>
		<hr />
		<p>
			Based on <a class="https://wiki.gnome.org/UserGroups/Guidelines">GNOME
				User Group Guidelines</a> and subject to the <a
				href="https://creativecommons.org/licenses/by/4.0/">Creative Commons
				Attribution 4.0 International License</a>
		</p>
	</div>
</div>