<blockquote>
<p>I believe we should find a way to have <em>less</em> things in auto_init instead of <em>more</em>.</p>
</blockquote>
<p>People tend to expect that an OS initializes its drivers. And I think for very fine reasons:</p>
<ol>
<li>It reduces the boiler plate code in applications</li>
<li>The initialization code is well tested and easier to maintain, than having the same functionality and code duplicated for each and every user of the driver</li>
<li>It is simpler to use and simpler to use <strong>correctly</strong><br>
a) It prevents applications from using the driver uninitialized<br>
b) It prevents two threads accessing a device from double-initialize a driver<br>
c) Even if the two threads would try to prevent double-initializing by checking if the driver is already initialized, this is inherently complex. E.g. the average application developer will likely write racy code that works by pure luck 99.9% of the time, with 0.1% ending up in two threads concurrently initializing the driver</li>
</ol>
<blockquote>
<p>So not only does it cross module boundaries, it crosses the sys-drivers boundary.</p>
</blockquote>
<p>This could be solved by moving driver initialization code to <code>drivers</code> (e.g. <code>drivers/auto_init</code>). But a boot sequence will always cross module-boundries. E.g. the startup code lives in <code>cpu</code>, which will e.g. call <code>board_init()</code> in <code>boards</code> and <code>periph_init</code> in <code>drivers</code>, and <code>kernel_init()</code> in <code>core</code>.</p>
<p>That said, I have nothing against moving driver initialization into <code>drivers</code>. But I'm strongly in favor of automatic initialization of the drivers (regardless of SAUL being used). (And of automatic registration of sensors and actuators to SAUL, if SAUL is used.)</p>

<p style="font-size:small;-webkit-text-size-adjust:none;color:#666;">—<br />You are receiving this because you are subscribed to this thread.<br />Reply to this email directly, <a href="https://github.com/RIOT-OS/RIOT/issues/11826?email_source=notifications&email_token=ABE7WYDWZLBLUZKLLEUXNB3P7CLRPA5CNFSM4IASCEL2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGODZZ7Y5Y#issuecomment-510917751">view it on GitHub</a>, or <a href="https://github.com/notifications/unsubscribe-auth/ABE7WYD6AAUBQZ5IKC45HTDP7CLRPANCNFSM4IASCELQ">mute the thread</a>.<img src="https://github.com/notifications/beacon/ABE7WYBGMOGCBGWOD76R3STP7CLRPA5CNFSM4IASCEL2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGODZZ7Y5Y.gif" height="1" width="1" alt="" /></p>
<script type="application/ld+json">[
{
"@context": "http://schema.org",
"@type": "EmailMessage",
"potentialAction": {
"@type": "ViewAction",
"target": "https://github.com/RIOT-OS/RIOT/issues/11826?email_source=notifications\u0026email_token=ABE7WYDWZLBLUZKLLEUXNB3P7CLRPA5CNFSM4IASCEL2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGODZZ7Y5Y#issuecomment-510917751",
"url": "https://github.com/RIOT-OS/RIOT/issues/11826?email_source=notifications\u0026email_token=ABE7WYDWZLBLUZKLLEUXNB3P7CLRPA5CNFSM4IASCEL2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGODZZ7Y5Y#issuecomment-510917751",
"name": "View Issue"
},
"description": "View this Issue on GitHub",
"publisher": {
"@type": "Organization",
"name": "GitHub",
"url": "https://github.com"
}
}
]</script>