<!-- 
	This document is provided as a template along with some guidance for creating
	your project proposal. This is just a template. Feel free to change it as
	you see fit (add sections, remove section). We feel, however, that the
	suggestions represented in this document represent the reasonable minimum
	amount of information to move forward.
	
	Please keep the formatting in this document simple. Please do not edit 
	this document in Microsoft Word as it adds huge piles of markup that make
	it difficult to restyle.
	
	More information is available here:
	
	http://wiki.eclipse.org/Development_Resources/HOWTO/Pre-Proposal_Phase
	
	Direct any questions about this template to emo@eclipse.org
 -->

<html>
<head>

<!-- 
	Include the title here. We will parse it out of here and include it on the
	rendered webpage. Do not duplicate the title within the text of your page.
 -->

<title>liblwm2m</title>
</head>

<!-- 
	We make use of the 'classic' HTML Definition List (dl) tag to specify
	committers. I know... you haven't seen this tag in a long while...
 -->
 
<style>
dt {
display: list-item;
list-style-position:outside;
list-style-image:url(/eclipse.org-common/themes/Phoenix/images/arrow.gif);
margin-left:16px;
}
dd {
margin-left:25px;
margin-bottom:5px;
}
</style>

<body>
    <p>
        The liblwm2m project is a proposed open source project under the
        <a href="http://projects.eclipse.org/projects/technology">Technology
        Top-level Project</a>.
    </p>
    <p>
        This proposal is in the Project Proposal Phase (as defined in the
        Eclipse Development Process) and is written to declare its intent and
        scope. We solicit additional participation and input from the Eclipse
        community. Please send all feedback to the
        <a href="http://www.eclipse.org/forums/eclipse.proposals">Eclipse
        Proposals</a> Forum.
    </p>

<h2>Background</h2>
    <p>
        The Open Mobile Alliance (OMA) is a standards body which develops open
        standards for the mobile phone industry like Multimedia Messaging
        Service (MMS), OMA Data Synchronization (OMA-DS) and OMA Device
        Management (OMA-DM). In February 2012, OMA-DM reached 1.4 Billion
        deployment in commercial devices.
    </p>
    <p>
        Analysis Mason forecasts that the number of M2M connected devices will
        grow to 2.1 billion devices in 2020. Machina Research projects that the
        number of M2M connections will grow to 20 billion in 2020. There will
        be more M2M devices shipped each year than PCs, tablets, cell phones,
        set-top-boxes and gaming platforms put together. This is why the OMA is
        now looking at M2M and the Internet of Things.
        At the end of 2013, OMA released the specifications for Lightweight M2M
        (LWM2M).
    </p>
    <p>
        OMA Lightweight M2M is a protocol for device and service management.
        The main purpose of this technology is to address service and
        management needs for constrained M2M devices, over a number of
        transports and bearers. The crucial aspects in this work are:
    </p>
        <ul>
            <li>
                The target, that is a variety of devices “constrained” at very
                different levels
            </li>
            <li>
                Data collection and remote controlling without complex
                computing and UI operations
            </li>
            <li>
                The optimization of network resources, as a very large numbers
                of devices may be connected to the communication network
                simultaneously
            </li>
            <li>
                The fusion of device functionalities management and service
                manipulation in a single protocol</li>
        </ul>
    <p>
        LWM2M defines three logical components:</p>
        <ul>
            <li>
                The LWM2M Server which manages LWM2M Clients.
            </li>
            <li>
                The LWM2M Client executing the operations from the LWM2M Server
                and reporting results of the operations for the device
                management and the service enablement.
            </li>
            <li>
                The LWM2M Bootstrap Server which configures the LWM2M Clients.
            </li>
        </ul>
        <p>And four interfaces between these logical components:</p>
        <ul>
            <li>
                Device Discovery and Registration<br/>
                This interface allows a LWM2M Client let the LWM2M Server know
                its existence and information (e.g., capability).
            </li>
            <li>
                Bootstrap<br/>
                This interface is used by the LWM2M Bootstrap Server to set
                initial parameters and configurations on the LWM2M Client.
            </li>
            <li>
                Device Management and Service Enablement<br/>
                This interface allows the LWM2M Server to perform the device
                management and M2M service enablement. Over this interface, the
                LWM2M Server can send operations to the Client and gets
                response of the operations from the LWM2M Client.
            </li>
            <li>
                Information Reporting<br/>
                This interface allows the LWM2M Client to report resource
                information to the LWM2M Server. This Information Reporting can
                be triggered periodically or by events.
            </li>
        </ul>
    
    <p>The LWM2M has the protocol stack defined as below:</p>
        <img src="liblwm2m_pic1.png" />
        <ul>
            <li>
                LWM2M Objects: LWM2M Objects are designed for each
                functionality the LWM2M Client provides. The LWM2M
                specification provides Standard Objects.
            </li>
            <li>
                LWM2M Protocol: defines logical operations and
                mechanisms per each interface.
            </li>
            <li>
                CoAP: LWM2M utilizes the IETF Constrained Application Protocol
                as an underlying transfer protocol across UDP and SMS bearers.
                This protocol defines the message header, request/response
                codes, message options, and retransmission mechanisms. LWM2M
                only uses the subset of features defined CoAP.
            </li>
            <li>
                DTLS: DTLS is used to provide security channel between the
                LWM2M Server and the LWM2M Client for all the messages
                interchanged.
            </li>
            <li>
                UDP Binding is mandatory and SMS Binding optional.
            </li>
        </ul>
    <p>
        Like in OMA-DM, in LWM2M the LWM2M Server manipulates resources on
        LWM2M Clients using commands like Read, Write, Execute, Create or
        Delete. The LWM2M Client may have any number of Resources, each of
        which belongs to an Object.
        An Object defines a grouping of Resources, for example the Firmware
        Object contains all the Resources used for firmware update purposes.
        The LWM2M enabler defines standard Objects and Resources and other
        Objects may be added to enable a certain M2M Services.
    </p>

<h2>Scope</h2>
    <p>
        The liblwm2m project covers the LWM2M Protocol, CoAP, and DTLS layers of
        the LWM2M protocol stack for all three logical components: LWM2M
        Client, LWM2M Server and LWM2M Bootstrap Server.
        An application using liblwm2m can fill any LWM2M roles or all of them
        at once.
    </p>
    <p>
        The CoAP and DTLS layers may be provided by external components.
    </p>
    <p>
        Regarding LWM2M Objects, liblwm2m only covers the objects required to
        have a functional LWM2M stack: LWM2M Security Object, LWM2M Server
        Object and optionally Access Control Object.
        Other LWM2M Objects are added as plugins to liblwm2m by the application.
    </p>

<h2>Description</h2>
    <p>
        Despite its name, liblwm2m is not a library but files to be built with
        an application. It is written in C and designed to be portable on POSIX
        compliant systems.<br/>
        Two compilation switches are used: LWM2M_CLIENT_MODE and
        LWM2M_SERVER_MODE. Defining LWM2M_CLIENT_MODE enables the LWM2M Client
        interfaces. Defining LWM2M_SERVER_MODE enables the LWM2M Server
        interfaces. Both can be defined at the same time.
    </p>
    <p>
        liblwm2m is mono-threaded. An application can call a HandlePacket API
        to feed liblwm2m with received LWM2M packets and a Step API to perform
        any pending LWM2M operations.
    </p>
    <p>
        liblwm2m provides APIs for a server application to send commands to
        registered LWM2M Clients. On client applications, liblwm2m checks
        received commands for syntax and access rights and then dispatches them
        to the relevant objects.
    </p>

<h2>Why Eclipse?</h2> 
    <p>
        Providing an OMA Lightweight M2M protocol implementation to the Eclipse
        community will help developers to write interoperable M2M services
        without having to deal with the complexity of the standard or having a
        deep knowledge of it.<br/>
        Being hosted by Eclipse, this project will welcome further
        contributions more easily, help the interoperability and thus reduce
        the fragmentation, to the best benefit of the technology and the
        industry.
    </p>

<h2>Initial Contribution</h2>
    <p>
        liblwm2m initial implementation is currently available on
        <a href="https://github.com/01org/liblwm2m">GitHub</a>.
    </p>
    <p>
        The code is functional and implements the Device Discovery and
        Registration interface, the Device Management and Service Enablement
        interface and the Information Reporting interface.<br/>
        The missing features are the Bootstrap interface, the DTLS layer and
        the Access Control Object.<br/>
        liblwm2m comes with two test applications: a LWM2M Client and a LWM2M
        Server. Both features a basic command line interface.
    </p>
    <p>
        The LWM2M protocol engine copyright is held by Intel Corporation with
        some contributions by Sierra Wireless.<br/>
        liblwm2m includes files from the Erbium CoAP Engine for Contiki which
        is copyrighted by the Institute for Pervasive Computing, ETH Zurich and
        released under a BSD 3-clause license.
    </p>

<h2>Legal Issues</h2>
    <p>
        liblwm2m is currently released under the BSD 3-clause license.<br/>
        The proposed licensing for this project will rely on dual license,
        Eclipse Distribution License and Eclipse Public License.
    </p>

<h2>Committers</h2>
    <p>
        The following individuals are proposed as initial committers to the
        project:
    </p>

    <dl>
	    <dt>David Navarro, Intel Corporation</dt>
        <dt>Julien Vermillard, Sierra Wireless</dt>
        <dt>Manuel Sangoï, Sierra Wireless</dt>
    </dl>

    <p>
        We welcome additional committers and contributions.
    </p>

<h2>Mentors</h2>

<!-- 
	New Eclipse projects require a minimum of two mentors from the Architecture
	Council. You need to identify two mentors before the project is created. The
	proposal can be posted before this section is filled in (it's a little easier
	to find a mentor when the proposal itself is public).
 -->

    <p>
        The following Architecture Council members will mentor this project:
    </p>

    <ul>
	    <li>
            Benjamin Cab&eacute;
        </li>
	    <li>
            Mentor 2
        </li>
    </ul>

<h2>Interested Parties</h2>

<!-- 
	Provide a list of individuals, organisations, companies, and other Eclipse
	projects that are interested in this project. This list will provide some
	insight into who your project's community will ultimately include. Where
	possible, include affiliations. Do not include email addresses.
 -->

    <p>
        The following individuals, organisations, companies and projects have
        expressed interest in this project:
    </p>

    <ul>
	    <li>
            Sierra Wireless
        </li>
	    <li>
            Somebody else, Affiliation
        </li>
    </ul>

<h2>Project Scheduling</h2>

<!-- 
	Describe, in rough terms, what the basic scheduling of the project will
	be. You might, for example, include an indication of when an initial contribution
	should be expected, when your first build will be ready, etc. Exact
	dates are not required.
 -->

<h2>Changes to this Document</h2>

<!-- 
	List any changes that have occurred in the document here.
	You only need to document changes that have occurred after the document
	has been posted live for the community to view and comment.
 -->

    <table>
	    <tr>
		    <th>Date</th>
		    <th>Change</th>
	    </tr>
	    <tr>
		    <td>04-December-2013</td>
		    <td>Document created</td>
	    </tr>
    </table>
</body>
</html>