<html>
<head>
    <base href="https://wiki.asterisk.org/wiki">
            <link rel="stylesheet" href="/wiki/s/en/2176/25/9/_/styles/combined.css?spaceKey=AST&amp;forWysiwyg=true" type="text/css">
    </head>
<body style="background: white;" bgcolor="white" class="email-body">
<div id="pageContent">
<div id="notificationFormat">
<div class="wiki-content">
<div class="email">
    <h2><a href="https://wiki.asterisk.org/wiki/display/AST/New+Feature+Process">New Feature Process</a></h2>
    <h4>Page <b>edited</b> by             <a href="https://wiki.asterisk.org/wiki/display/~mjordan">Matt Jordan</a>
    </h4>
        <br/>
                         <h4>Changes (8)</h4>
                                 
    
<div id="page-diffs">
                    <table class="diff" cellpadding="0" cellspacing="0">
    
            <tr><td class="diff-snipped" >...<br></td></tr>
            <tr><td class="diff-unchanged" >{section} <br>{column:width=50%} <br></td></tr>
            <tr><td class="diff-deleted-lines" style="color:#999;background-color:#fdd;text-decoration:line-through;">{center}Feature Description{center} <br></td></tr>
            <tr><td class="diff-added-lines" style="background-color: #dfd;">{center}*Feature Description*{center} <br></td></tr>
            <tr><td class="diff-unchanged" >{column} <br>{column:width=50%} <br></td></tr>
            <tr><td class="diff-changed-lines" ><span class="diff-changed-words">{center}<span class="diff-added-chars"style="background-color: #dfd;">*</span>Analysis<span class="diff-added-chars"style="background-color: #dfd;">*</span>{center}</span> <br></td></tr>
            <tr><td class="diff-unchanged" >{column} <br>{section} <br></td></tr>
            <tr><td class="diff-snipped" >...<br></td></tr>
            <tr><td class="diff-unchanged" >{column} <br>{column:width=50%} <br></td></tr>
            <tr><td class="diff-added-lines" style="background-color: #dfd;">* Most likely does not belong in Asterisk. <br></td></tr>
            <tr><td class="diff-changed-lines" ><span class="diff-deleted-words"style="color:#999;background-color:#fdd;text-decoration:line-through;">*</span> <span class="diff-added-words"style="background-color: #dfd;">**</span> Very difficult to implement without hard coding business logic into the module itself.  Once custom logic is hard coded, its difficult to remove and creates a moving target for development/maintenance. <br><span class="diff-deleted-words"style="color:#999;background-color:#fdd;text-decoration:line-through;">*</span> <span class="diff-added-words"style="background-color: #dfd;">**</span> Because the business logic will almost have to be hard coded in the module, this feature most likely is better served by being provided as a separate module outside of Asterisk itself. <br></td></tr>
            <tr><td class="diff-unchanged" >{column} <br>{section} <br>{panel} <br> <br></td></tr>
            <tr><td class="diff-added-lines" style="background-color: #dfd;">{panel:title=Machine Parseable CLI Command|borderStyle=solid|bgColor=white} <br>{section} <br>{column:width=50%} <br>{center}*Feature Description*{center} <br>{column} <br>{column:width=50%} <br>{center}*Analysis*{center} <br>{column} <br>{section} <br>{section} <br>{column:width=50%} <br>* Add a new CLI command &#39;motif show channel concise&#39; that dumps Motif channels in a machine parseable format. <br>{column} <br>{column:width=50%} <br>* Most likely does not belong in Asterisk. <br>** Closely duplicated by existing functionality (&#39;core show channels concise&#39;) <br>** Dumping machine parseable information in the CLI is a practice that is discouraged.  Interfaces suitable for external application development exist, and the CLI is better served for human interaction. <br>{column} <br>{section} <br>{panel} <br> <br>{panel:title=Video Capable Jitter Buffer|borderStyle=solid|bgColor=white} <br>{section} <br>{column:width=50%} <br>{center}*Feature Description*{center} <br>{column} <br>{column:width=50%} <br>{center}*Analysis*{center} <br>{column} <br>{section} <br>{section} <br>{column:width=50%} <br>* Make the Asterisk jitter buffers handle video frames. <br>{column} <br>{column:width=50%} <br>* Has to be done in Asterisk. <br>** Feature has general applicability. <br>** Cannot be done outside of Asterisk. <br>{column} <br>{section} <br>{panel} <br> <br></td></tr>
            <tr><td class="diff-unchanged" >Since this is a subjective discussion, feel free to bring up ideas for new features on the [Asterisk Developer&#39;s Mailing List|http://lists.digium.com/mailman/listinfo/asterisk-dev]. <br> <br></td></tr>
            <tr><td class="diff-deleted-lines" style="color:#999;background-color:#fdd;text-decoration:line-through;">h2. Major Projects <br></td></tr>
            <tr><td class="diff-added-lines" style="background-color: #dfd;">h2. Is the Feature Appropriate for the next Major Version? <br></td></tr>
            <tr><td class="diff-unchanged" > <br> <br></td></tr>
            <tr><td class="diff-snipped" >...<br></td></tr>
    
            </table>
    </div>                            <h4>Full Content</h4>
                    <div class="notificationGreySide">
        <h1><a name="NewFeatureProcess-Overview"></a>Overview</h1>

<p>At some point in time, you may find yourself asking, "I wish Asterisk did (X)".  The great news about Open Source software is that if you really want, you can make Asterisk do (X)!  But after making Asterisk do (X), you may find yourself wishing that you didn't have to patch Asterisk every time you need to upgrade a system.  At which point, you'll want to have your feature included in the Asterisk source.</p>

<p>This page describes how new features move through the Asterisk development process.  For more information on general issue workflows, see <a href="/wiki/display/AST/Issue+Tracker+Workflow" title="Issue Tracker Workflow">Issue Tracker Workflow</a>.</p>

<p>New features are developed against Asterisk <a href="http://svn.asterisk.org/svn/asterisk/trunk/" class="external-link" rel="nofollow">trunk</a>.</p>

<h1><a name="NewFeatureProcess-NewFeaturePlanning"></a>New Feature Planning</h1>

<p>Before writing a new feature for Asterisk, there are multiple things to consider.</p>

<ul>
        <li>Is the feature general purpose enough that it is appropriate for all Asterisk consumers?</li>
        <li>Is the feature appropriate for the next major version release?</li>
        <li>How can I help reviewers of the feature verify its correctness?</li>
        <li>How can I help Asterisk developers maintain the new feature, once its included?</li>
</ul>


<h2><a name="NewFeatureProcess-IsaNewFeatureAppropriate%3F"></a>Is a New Feature Appropriate?</h2>

<p>Whether or not a new feature is general enough to be appropriate for inclusion in Asterisk is a tricky question, because it is inherently subjective.  If you're considering adding a new feature to Asterisk, you obviously find it useful!  However, not everyone uses Asterisk the same way, and features added to Asterisk should be as generally applicable to everyone as possible.</p>

<p>Some case studies illustrating features that could be considered for inclusion in Asterisk and why or why not they are appropriate are below.</p>

<div class="panel" style="background-color: white;border-style: solid;border-width: 1px;"><div class="panelHeader" style="border-bottom-width: 1px;border-bottom-style: solid;background-color: white;"><b>Custom Device State Provider</b></div><div class="panelContent" style="background-color: white;">
<table class="sectionMacro" border="0" cellpadding="5" cellspacing="0" width="100%"><tbody><tr>
<td class="confluenceTd" valign="top" width="50%">
<div class="" align="center"><b>Feature Description</b></div>
</td>
<td class="confluenceTd" valign="top" width="50%">
<div class="" align="center"><b>Analysis</b></div>
</td></tr></tbody></table>
<table class="sectionMacro" border="0" cellpadding="5" cellspacing="0" width="100%"><tbody><tr>
<td class="confluenceTd" valign="top" width="50%">
<ul>
        <li>A new module that intercepts device state from a set of configurable devices and modifies the state that is passed to subscribers</li>
        <li>Example:
        <ul>
                <li>Alice subscribes to Bob's presence</li>
                <li>The module forces Bob to be Not Available during the evenings, but only for Alice.  If someone else subscribes to the device state (say, Charlie), they see Bob as his original status at all times.</li>
        </ul>
        </li>
</ul>
</td>
<td class="confluenceTd" valign="top" width="50%">
<ul>
        <li>Most likely does not belong in Asterisk.
        <ul>
                <li>Very difficult to implement without hard coding business logic into the module itself.  Once custom logic is hard coded, its difficult to remove and creates a moving target for development/maintenance.</li>
                <li>Because the business logic will almost have to be hard coded in the module, this feature most likely is better served by being provided as a separate module outside of Asterisk itself.</li>
        </ul>
        </li>
</ul>
</td></tr></tbody></table>
</div></div>

<div class="panel" style="background-color: white;border-style: solid;border-width: 1px;"><div class="panelHeader" style="border-bottom-width: 1px;border-bottom-style: solid;background-color: white;"><b>Machine Parseable CLI Command</b></div><div class="panelContent" style="background-color: white;">
<table class="sectionMacro" border="0" cellpadding="5" cellspacing="0" width="100%"><tbody><tr>
<td class="confluenceTd" valign="top" width="50%">
<div class="" align="center"><b>Feature Description</b></div>
</td>
<td class="confluenceTd" valign="top" width="50%">
<div class="" align="center"><b>Analysis</b></div>
</td></tr></tbody></table>
<table class="sectionMacro" border="0" cellpadding="5" cellspacing="0" width="100%"><tbody><tr>
<td class="confluenceTd" valign="top" width="50%">
<ul>
        <li>Add a new CLI command 'motif show channel concise' that dumps Motif channels in a machine parseable format.</li>
</ul>
</td>
<td class="confluenceTd" valign="top" width="50%">
<ul>
        <li>Most likely does not belong in Asterisk.
        <ul>
                <li>Closely duplicated by existing functionality ('core show channels concise')</li>
                <li>Dumping machine parseable information in the CLI is a practice that is discouraged.  Interfaces suitable for external application development exist, and the CLI is better served for human interaction.</li>
        </ul>
        </li>
</ul>
</td></tr></tbody></table>
</div></div>

<div class="panel" style="background-color: white;border-style: solid;border-width: 1px;"><div class="panelHeader" style="border-bottom-width: 1px;border-bottom-style: solid;background-color: white;"><b>Video Capable Jitter Buffer</b></div><div class="panelContent" style="background-color: white;">
<table class="sectionMacro" border="0" cellpadding="5" cellspacing="0" width="100%"><tbody><tr>
<td class="confluenceTd" valign="top" width="50%">
<div class="" align="center"><b>Feature Description</b></div>
</td>
<td class="confluenceTd" valign="top" width="50%">
<div class="" align="center"><b>Analysis</b></div>
</td></tr></tbody></table>
<table class="sectionMacro" border="0" cellpadding="5" cellspacing="0" width="100%"><tbody><tr>
<td class="confluenceTd" valign="top" width="50%">
<ul>
        <li>Make the Asterisk jitter buffers handle video frames.</li>
</ul>
</td>
<td class="confluenceTd" valign="top" width="50%">
<ul>
        <li>Has to be done in Asterisk.
        <ul>
                <li>Feature has general applicability.</li>
                <li>Cannot be done outside of Asterisk.</li>
        </ul>
        </li>
</ul>
</td></tr></tbody></table>
</div></div>

<p>Since this is a subjective discussion, feel free to bring up ideas for new features on the <a href="http://lists.digium.com/mailman/listinfo/asterisk-dev" class="external-link" rel="nofollow">Asterisk Developer's Mailing List</a>.</p>

<h2><a name="NewFeatureProcess-IstheFeatureAppropriateforthenextMajorVersion%3F"></a>Is the Feature Appropriate for the next Major Version?</h2>



<h1><a name="NewFeatureProcess-NewFeatureDevelopment"></a>New Feature Development</h1>

<h2><a name="NewFeatureProcess-Testing"></a>Testing</h2>

<h2><a name="NewFeatureProcess-Resources"></a>Resources</h2>

<h1><a name="NewFeatureProcess-PeerReview"></a>Peer Review</h1>

<h1><a name="NewFeatureProcess-IncludingtheFeatureinAsterisk"></a>Including the Feature in Asterisk</h1>

<h2><a name="NewFeatureProcess-CommitAccess"></a>Commit Access</h2>
    </div>
        <div id="commentsSection" class="wiki-content pageSection">
        <div style="float: right;" class="grey">
                        <a href="https://wiki.asterisk.org/wiki/users/removespacenotification.action?spaceKey=AST">Stop watching space</a>
            <span style="padding: 0px 5px;">|</span>
                <a href="https://wiki.asterisk.org/wiki/users/editmyemailsettings.action">Change email notification preferences</a>
</div>
        <a href="https://wiki.asterisk.org/wiki/display/AST/New+Feature+Process">View Online</a>
        |
        <a href="https://wiki.asterisk.org/wiki/pages/diffpagesbyversion.action?pageId=21464432&revisedVersion=10&originalVersion=9">View Changes</a>
                |
        <a href="https://wiki.asterisk.org/wiki/display/AST/New+Feature+Process?showComments=true&amp;showCommentArea=true#addcomment">Add Comment</a>
            </div>
</div>
</div>
</div>
</div>
</body>
</html>