<!DOCTYPE html>
<html lang="en-US" prefix="og: http://ogp.me/ns# article: http://ogp.me/ns/article#">

<head>
	
	<meta charset="UTF-8">
	<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1">
	<link rel="profile" href="http://gmpg.org/xfn/11">
		<title>How to Implement a Web Application Framework in an Embedded Linux System &#8211; BEC Systems</title>
<meta name='robots' content='max-image-preview:large' />
<script>window._wca = window._wca || [];</script>
<link rel='dns-prefetch' href='//cdn.usefathom.com' />
<link rel='dns-prefetch' href='//stats.wp.com' />
<link rel="alternate" type="application/rss+xml" title="BEC Systems &raquo; Feed" href="https://bec-systems.com/feed/" />
<link rel="alternate" type="application/rss+xml" title="BEC Systems &raquo; Comments Feed" href="https://bec-systems.com/comments/feed/" />
<link rel="alternate" title="oEmbed (JSON)" type="application/json+oembed" href="https://bec-systems.com/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fbec-systems.com%2F40%2Fweb-application-framework-embedded-linux%2F" />
<link rel="alternate" title="oEmbed (XML)" type="text/xml+oembed" href="https://bec-systems.com/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fbec-systems.com%2F40%2Fweb-application-framework-embedded-linux%2F&#038;format=xml" />
<style id="wp-img-auto-sizes-contain-inline-css">
img:is([sizes=auto i],[sizes^="auto," i]){contain-intrinsic-size:3000px 1500px}
/*# sourceURL=wp-img-auto-sizes-contain-inline-css */
</style>
<link rel='stylesheet' id='dashicons-css' href='https://bec-systems.com/wp-includes/css/dashicons.min.css?ver=7.0' media='all' />
<style id="wp-emoji-styles-inline-css">

	img.wp-smiley, img.emoji {
		display: inline !important;
		border: none !important;
		box-shadow: none !important;
		height: 1em !important;
		width: 1em !important;
		margin: 0 0.07em !important;
		vertical-align: -0.1em !important;
		background: none !important;
		padding: 0 !important;
	}
/*# sourceURL=wp-emoji-styles-inline-css */
</style>
<style id="wp-block-library-inline-css">
:root{--wp-block-synced-color:#7a00df;--wp-block-synced-color--rgb:122,0,223;--wp-bound-block-color:var(--wp-block-synced-color);--wp-editor-canvas-background:#ddd;--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,160.5;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}.wp-element-button{cursor:pointer}:root .has-very-light-gray-background-color{background-color:#eee}:root .has-very-dark-gray-background-color{background-color:#313131}:root .has-very-light-gray-color{color:#eee}:root .has-very-dark-gray-color{color:#313131}:root .has-vivid-green-cyan-to-vivid-cyan-blue-gradient-background{background:linear-gradient(135deg,#00d084,#0693e3)}:root .has-purple-crush-gradient-background{background:linear-gradient(135deg,#34e2e4,#4721fb 50%,#ab1dfe)}:root .has-hazy-dawn-gradient-background{background:linear-gradient(135deg,#faaca8,#dad0ec)}:root .has-subdued-olive-gradient-background{background:linear-gradient(135deg,#fafae1,#67a671)}:root .has-atomic-cream-gradient-background{background:linear-gradient(135deg,#fdd79a,#004a59)}:root .has-nightshade-gradient-background{background:linear-gradient(135deg,#330968,#31cdcf)}:root .has-midnight-gradient-background{background:linear-gradient(135deg,#020381,#2874fc)}:root{--wp--preset--font-size--normal:16px;--wp--preset--font-size--huge:42px}.has-regular-font-size{font-size:1em}.has-larger-font-size{font-size:2.625em}.has-normal-font-size{font-size:var(--wp--preset--font-size--normal)}.has-huge-font-size{font-size:var(--wp--preset--font-size--huge)}:root .has-text-align-center{text-align:center}:root .has-text-align-left{text-align:left}:root .has-text-align-right{text-align:right}.has-fit-text{white-space:nowrap!important}#end-resizable-editor-section{display:none}.aligncenter{clear:both}.items-justified-left{justify-content:flex-start}.items-justified-center{justify-content:center}.items-justified-right{justify-content:flex-end}.items-justified-space-between{justify-content:space-between}.screen-reader-text{word-wrap:normal!important;border:0;clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.screen-reader-text:focus{background-color:#ddd;clip-path:none;color:#444;display:block;font-size:1em;height:auto;left:5px;line-height:normal;padding:15px 23px 14px;text-decoration:none;top:5px;width:auto;z-index:100000}html :where(.has-border-color){border-style:solid}html :where([style*=border-color]){border-style:solid}html :where([style*=border-top-color]){border-top-style:solid}html :where([style*=border-right-color]){border-right-style:solid}html :where([style*=border-bottom-color]){border-bottom-style:solid}html :where([style*=border-left-color]){border-left-style:solid}html :where([style*=border-width]){border-style:solid}html :where([style*=border-top-width]){border-top-style:solid}html :where([style*=border-right-width]){border-right-style:solid}html :where([style*=border-bottom-width]){border-bottom-style:solid}html :where([style*=border-left-width]){border-left-style:solid}html :where(img[class*=wp-image-]){height:auto;max-width:100%}:where(figure){margin:0 0 1em}html :where(.is-position-sticky){--wp-admin--admin-bar--position-offset:var(--wp-admin--admin-bar--height,0px)}@media screen and (max-width:600px){html :where(.is-position-sticky){--wp-admin--admin-bar--position-offset:0px}}

/*# sourceURL=/wp-includes/css/dist/block-library/common.min.css */
</style>
<style id="wp-block-paragraph-inline-css">
.is-small-text{font-size:.875em}.is-regular-text{font-size:1em}.is-large-text{font-size:2.25em}.is-larger-text{font-size:3em}.has-drop-cap:not(:focus):first-letter{float:left;font-size:8.4em;font-style:normal;font-weight:100;line-height:.68;margin:.05em .1em 0 0;text-transform:uppercase}body.rtl .has-drop-cap:not(:focus):first-letter{float:none;margin-left:.1em}p.has-drop-cap.has-background{overflow:hidden}:root :where(p.has-background){padding:1.25em 2.375em}:where(p.has-text-color:not(.has-link-color)) a{color:inherit}p.has-text-align-left[style*="writing-mode:vertical-lr"],p.has-text-align-right[style*="writing-mode:vertical-rl"]{rotate:180deg}
/*# sourceURL=https://bec-systems.com/wp-includes/blocks/paragraph/style.min.css */
</style>

<style id="classic-theme-styles-inline-css">
/*! This file is auto-generated */
.wp-block-button__link{color:#fff;background-color:#32373c;border-radius:9999px;box-shadow:none;text-decoration:none;padding:calc(.667em + 2px) calc(1.333em + 2px);font-size:1.125em}.wp-block-file__button{background:#32373c;color:#fff;text-decoration:none}
/*# sourceURL=/wp-includes/css/classic-themes.min.css */
</style>

<link rel='stylesheet' id='convertkit-frontend-css' href='https://bec-systems.com/wp-content/plugins/convertkit/resources/frontend/css/frontend.css?ver=3.3.3' media='all' />
<style id="wp-block-button-inline-css">
.wp-block-button__link{align-content:center;box-sizing:border-box;cursor:pointer;display:inline-block;height:100%;text-align:center;word-break:break-word}.wp-block-button__link.aligncenter{text-align:center}.wp-block-button__link.alignright{text-align:right}:where(.wp-block-button__link){border-radius:9999px;box-shadow:none;padding:calc(.667em + 2px) calc(1.333em + 2px);text-decoration:none}.wp-block-button[style*=text-decoration] .wp-block-button__link{text-decoration:inherit}.wp-block-buttons>.wp-block-button.has-custom-width{max-width:none}.wp-block-buttons>.wp-block-button.has-custom-width .wp-block-button__link{width:100%}.wp-block-buttons>.wp-block-button.has-custom-font-size .wp-block-button__link{font-size:inherit}.wp-block-buttons>.wp-block-button.wp-block-button__width-25{width:calc(25% - var(--wp--style--block-gap, .5em)*.75)}.wp-block-buttons>.wp-block-button.wp-block-button__width-50{width:calc(50% - var(--wp--style--block-gap, .5em)*.5)}.wp-block-buttons>.wp-block-button.wp-block-button__width-75{width:calc(75% - var(--wp--style--block-gap, .5em)*.25)}.wp-block-buttons>.wp-block-button.wp-block-button__width-100{flex-basis:100%;width:100%}.wp-block-buttons.is-vertical>.wp-block-button.wp-block-button__width-25{width:25%}.wp-block-buttons.is-vertical>.wp-block-button.wp-block-button__width-50{width:50%}.wp-block-buttons.is-vertical>.wp-block-button.wp-block-button__width-75{width:75%}.wp-block-button.is-style-squared,.wp-block-button__link.wp-block-button.is-style-squared{border-radius:0}.wp-block-button.no-border-radius,.wp-block-button__link.no-border-radius{border-radius:0!important}:root :where(.wp-block-button .wp-block-button__link.is-style-outline),:root :where(.wp-block-button.is-style-outline>.wp-block-button__link){border:2px solid;padding:.667em 1.333em}:root :where(.wp-block-button .wp-block-button__link.is-style-outline:not(.has-text-color)),:root :where(.wp-block-button.is-style-outline>.wp-block-button__link:not(.has-text-color)){color:currentColor}:root :where(.wp-block-button .wp-block-button__link.is-style-outline:not(.has-background)),:root :where(.wp-block-button.is-style-outline>.wp-block-button__link:not(.has-background)){background-color:initial;background-image:none}
/*# sourceURL=https://bec-systems.com/wp-includes/blocks/button/style.min.css */
</style>
<style id="global-styles-inline-css">
:root{--wp--preset--aspect-ratio--square: 1;--wp--preset--aspect-ratio--4-3: 4/3;--wp--preset--aspect-ratio--3-4: 3/4;--wp--preset--aspect-ratio--3-2: 3/2;--wp--preset--aspect-ratio--2-3: 2/3;--wp--preset--aspect-ratio--16-9: 16/9;--wp--preset--aspect-ratio--9-16: 9/16;--wp--preset--color--black: #000000;--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: #ffffff;--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--color--neve-link-color: var(--nv-primary-accent);--wp--preset--color--neve-link-hover-color: var(--nv-secondary-accent);--wp--preset--color--nv-site-bg: var(--nv-site-bg);--wp--preset--color--nv-light-bg: var(--nv-light-bg);--wp--preset--color--nv-dark-bg: var(--nv-dark-bg);--wp--preset--color--neve-text-color: var(--nv-text-color);--wp--preset--color--nv-text-dark-bg: var(--nv-text-dark-bg);--wp--preset--color--nv-c-1: var(--nv-c-1);--wp--preset--color--nv-c-2: var(--nv-c-2);--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgb(6,147,227) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgb(252,185,0) 0%,rgb(255,105,0) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgb(255,105,0) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--font-size--small: 13px;--wp--preset--font-size--medium: 20px;--wp--preset--font-size--large: 36px;--wp--preset--font-size--x-large: 42px;--wp--preset--spacing--20: 0.44rem;--wp--preset--spacing--30: 0.67rem;--wp--preset--spacing--40: 1rem;--wp--preset--spacing--50: 1.5rem;--wp--preset--spacing--60: 2.25rem;--wp--preset--spacing--70: 3.38rem;--wp--preset--spacing--80: 5.06rem;--wp--preset--shadow--natural: 6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep: 12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp: 6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined: 6px 6px 0px -3px rgb(255, 255, 255), 6px 6px rgb(0, 0, 0);--wp--preset--shadow--crisp: 6px 6px 0px rgb(0, 0, 0);}:where(body) { margin: 0; }:where(.is-layout-flex){gap: 0.5em;}:where(.is-layout-grid){gap: 0.5em;}body .is-layout-flex{display: flex;}.is-layout-flex{flex-wrap: wrap;align-items: center;}.is-layout-flex > :is(*, div){margin: 0;}body .is-layout-grid{display: grid;}.is-layout-grid > :is(*, div){margin: 0;}body{padding-top: 0px;padding-right: 0px;padding-bottom: 0px;padding-left: 0px;}:root :where(.wp-element-button, .wp-block-button__link){background-color: #32373c;border-width: 0;color: #fff;font-family: inherit;font-size: inherit;font-style: inherit;font-weight: inherit;letter-spacing: inherit;line-height: inherit;padding-top: calc(0.667em + 2px);padding-right: calc(1.333em + 2px);padding-bottom: calc(0.667em + 2px);padding-left: calc(1.333em + 2px);text-decoration: none;text-transform: inherit;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-neve-link-color-color{color: var(--wp--preset--color--neve-link-color) !important;}.has-neve-link-hover-color-color{color: var(--wp--preset--color--neve-link-hover-color) !important;}.has-nv-site-bg-color{color: var(--wp--preset--color--nv-site-bg) !important;}.has-nv-light-bg-color{color: var(--wp--preset--color--nv-light-bg) !important;}.has-nv-dark-bg-color{color: var(--wp--preset--color--nv-dark-bg) !important;}.has-neve-text-color-color{color: var(--wp--preset--color--neve-text-color) !important;}.has-nv-text-dark-bg-color{color: var(--wp--preset--color--nv-text-dark-bg) !important;}.has-nv-c-1-color{color: var(--wp--preset--color--nv-c-1) !important;}.has-nv-c-2-color{color: var(--wp--preset--color--nv-c-2) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-neve-link-color-background-color{background-color: var(--wp--preset--color--neve-link-color) !important;}.has-neve-link-hover-color-background-color{background-color: var(--wp--preset--color--neve-link-hover-color) !important;}.has-nv-site-bg-background-color{background-color: var(--wp--preset--color--nv-site-bg) !important;}.has-nv-light-bg-background-color{background-color: var(--wp--preset--color--nv-light-bg) !important;}.has-nv-dark-bg-background-color{background-color: var(--wp--preset--color--nv-dark-bg) !important;}.has-neve-text-color-background-color{background-color: var(--wp--preset--color--neve-text-color) !important;}.has-nv-text-dark-bg-background-color{background-color: var(--wp--preset--color--nv-text-dark-bg) !important;}.has-nv-c-1-background-color{background-color: var(--wp--preset--color--nv-c-1) !important;}.has-nv-c-2-background-color{background-color: var(--wp--preset--color--nv-c-2) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-neve-link-color-border-color{border-color: var(--wp--preset--color--neve-link-color) !important;}.has-neve-link-hover-color-border-color{border-color: var(--wp--preset--color--neve-link-hover-color) !important;}.has-nv-site-bg-border-color{border-color: var(--wp--preset--color--nv-site-bg) !important;}.has-nv-light-bg-border-color{border-color: var(--wp--preset--color--nv-light-bg) !important;}.has-nv-dark-bg-border-color{border-color: var(--wp--preset--color--nv-dark-bg) !important;}.has-neve-text-color-border-color{border-color: var(--wp--preset--color--neve-text-color) !important;}.has-nv-text-dark-bg-border-color{border-color: var(--wp--preset--color--nv-text-dark-bg) !important;}.has-nv-c-1-border-color{border-color: var(--wp--preset--color--nv-c-1) !important;}.has-nv-c-2-border-color{border-color: var(--wp--preset--color--nv-c-2) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;}
/*# sourceURL=global-styles-inline-css */
</style>

<link rel='stylesheet' id='module-frontend-css' href='https://bec-systems.com/wp-content/plugins/sensei-lms/assets/dist/css/modules-frontend.css?ver=6f282392f857e1cd0631' media='all' />
<link rel='stylesheet' id='pages-frontend-css' href='https://bec-systems.com/wp-content/plugins/sensei-lms/assets/dist/css/pages-frontend.css?ver=273eee0a3eb3fc744030' media='all' />
<link rel='stylesheet' id='sensei-frontend-css' href='https://bec-systems.com/wp-content/plugins/sensei-lms/assets/dist/css/frontend.css?ver=11d6148c6a4a283be47a' media='screen' />
<link rel='stylesheet' id='woocommerce-layout-css' href='https://bec-systems.com/wp-content/plugins/woocommerce/assets/css/woocommerce-layout.css?ver=10.7.0' media='all' />
<style id="woocommerce-layout-inline-css">

	.infinite-scroll .woocommerce-pagination {
		display: none;
	}
/*# sourceURL=woocommerce-layout-inline-css */
</style>
<link rel='stylesheet' id='woocommerce-smallscreen-css' href='https://bec-systems.com/wp-content/plugins/woocommerce/assets/css/woocommerce-smallscreen.css?ver=10.7.0' media='only screen and (max-width: 768px)' />
<link rel='stylesheet' id='woocommerce-general-css' href='https://bec-systems.com/wp-content/plugins/woocommerce/assets/css/woocommerce.css?ver=10.7.0' media='all' />
<style id="woocommerce-inline-inline-css">
.woocommerce form .form-row .required { visibility: visible; }
/*# sourceURL=woocommerce-inline-inline-css */
</style>
<link rel='stylesheet' id='neve-woocommerce-css' href='https://bec-systems.com/wp-content/themes/neve/assets/css/woocommerce.min.css?ver=4.2.4' media='all' />
<link rel='stylesheet' id='neve-style-css' href='https://bec-systems.com/wp-content/themes/neve/style-main-new.min.css?ver=4.2.4' media='all' />
<style id="neve-style-inline-css">
.is-menu-sidebar .header-menu-sidebar { visibility: visible; }.is-menu-sidebar.menu_sidebar_slide_left .header-menu-sidebar { transform: translate3d(0, 0, 0); left: 0; }.is-menu-sidebar.menu_sidebar_slide_right .header-menu-sidebar { transform: translate3d(0, 0, 0); right: 0; }.is-menu-sidebar.menu_sidebar_pull_right .header-menu-sidebar, .is-menu-sidebar.menu_sidebar_pull_left .header-menu-sidebar { transform: translateX(0); }.is-menu-sidebar.menu_sidebar_dropdown .header-menu-sidebar { height: auto; }.is-menu-sidebar.menu_sidebar_dropdown .header-menu-sidebar-inner { max-height: 400px; padding: 20px 0; }.is-menu-sidebar.menu_sidebar_full_canvas .header-menu-sidebar { opacity: 1; }.header-menu-sidebar .menu-item-nav-search:not(.floating) { pointer-events: none; }.header-menu-sidebar .menu-item-nav-search .is-menu-sidebar { pointer-events: unset; }@media screen and (max-width: 960px) { .builder-item.cr .item--inner { --textalign: center; --justify: center; } }
.nv-meta-list li.meta:not(:last-child):after { content:"/" }.nv-meta-list .no-mobile{
			display:none;
		}.nv-meta-list li.last::after{
			content: ""!important;
		}@media (min-width: 769px) {
			.nv-meta-list .no-mobile {
				display: inline-block;
			}
			.nv-meta-list li.last:not(:last-child)::after {
		 		content: "/" !important;
			}
		}
 :root{ --container: 748px;--postwidth:100%; --primarybtnbg: var(--nv-primary-accent); --primarybtnhoverbg: var(--nv-primary-accent); --primarybtncolor: #fff; --secondarybtncolor: var(--nv-primary-accent); --primarybtnhovercolor: #fff; --secondarybtnhovercolor: var(--nv-primary-accent);--primarybtnborderradius:3px;--secondarybtnborderradius:3px;--secondarybtnborderwidth:3px;--btnpadding:13px 15px;--primarybtnpadding:13px 15px;--secondarybtnpadding:calc(13px - 3px) calc(15px - 3px); --bodyfontfamily: Arial,Helvetica,sans-serif; --bodyfontsize: 15px; --bodylineheight: 1.6; --bodyletterspacing: 0px; --bodyfontweight: 400; --h1fontsize: 36px; --h1fontweight: 700; --h1lineheight: 1.2; --h1letterspacing: 0px; --h1texttransform: none; --h2fontsize: 28px; --h2fontweight: 700; --h2lineheight: 1.3; --h2letterspacing: 0px; --h2texttransform: none; --h3fontsize: 24px; --h3fontweight: 700; --h3lineheight: 1.4; --h3letterspacing: 0px; --h3texttransform: none; --h4fontsize: 20px; --h4fontweight: 700; --h4lineheight: 1.6; --h4letterspacing: 0px; --h4texttransform: none; --h5fontsize: 16px; --h5fontweight: 700; --h5lineheight: 1.6; --h5letterspacing: 0px; --h5texttransform: none; --h6fontsize: 14px; --h6fontweight: 700; --h6lineheight: 1.6; --h6letterspacing: 0px; --h6texttransform: none;--formfieldborderwidth:2px;--formfieldborderradius:3px; --formfieldbgcolor: var(--nv-site-bg); --formfieldbordercolor: #dddddd; --formfieldcolor: var(--nv-text-color);--formfieldpadding:10px 12px; } .nv-index-posts{ --borderradius:0px; } .single-post-container .alignfull > [class*="__inner-container"], .single-post-container .alignwide > [class*="__inner-container"]{ max-width:718px } .single-product .alignfull > [class*="__inner-container"], .single-product .alignwide > [class*="__inner-container"]{ max-width:718px } .nv-meta-list{ --avatarsize: 20px; } .single .nv-meta-list{ --avatarsize: 20px; } .nv-post-cover{ --height: 250px;--padding:40px 15px;--justify: flex-start; --textalign: left; --valign: center; } .nv-post-cover .nv-title-meta-wrap, .nv-page-title-wrap, .entry-header{ --textalign: left; } .nv-is-boxed.nv-title-meta-wrap{ --padding:40px 15px; --bgcolor: var(--nv-dark-bg); } .nv-overlay{ --opacity: 50; --blendmode: normal; } .nv-is-boxed.nv-comments-wrap{ --padding:20px; } .nv-is-boxed.comment-respond{ --padding:20px; } .single:not(.single-product), .page{ --c-vspace:0 0 0 0;; } .scroll-to-top{ --color: var(--nv-text-dark-bg);--padding:8px 10px; --borderradius: 3px; --bgcolor: var(--nv-primary-accent); --hovercolor: var(--nv-text-dark-bg); --hoverbgcolor: var(--nv-primary-accent);--size:16px; } .global-styled{ --bgcolor: var(--nv-site-bg); } .header-top{ --rowbcolor: var(--nv-light-bg); --color: var(--nv-text-color); --bgcolor: var(--nv-site-bg); } .header-main{ --rowbcolor: var(--nv-light-bg); --color: var(--nv-text-color); --bgcolor: var(--nv-site-bg); } .header-bottom{ --rowbcolor: var(--nv-light-bg); --color: var(--nv-text-color); --bgcolor: var(--nv-site-bg); } .header-menu-sidebar-bg{ --justify: flex-start; --textalign: left;--flexg: 1;--wrapdropdownwidth: auto; --color: var(--nv-text-color); --bgcolor: var(--nv-site-bg); } .header-menu-sidebar{ width: 360px; } .builder-item--logo{ --maxwidth: 120px; --fs: 24px;--padding:10px 0;--margin:0; --textalign: left;--justify: flex-start; } .builder-item--nav-icon,.header-menu-sidebar .close-sidebar-panel .navbar-toggle{ --borderradius:0; } .builder-item--nav-icon{ --label-margin:0 5px 0 0;;--padding:10px 15px;--margin:0; } .builder-item--primary-menu{ --hovercolor: var(--nv-secondary-accent); --hovertextcolor: var(--nv-text-color); --activecolor: var(--nv-primary-accent); --spacing: 20px; --height: 25px;--padding:0;--margin:0; --fontsize: 1em; --lineheight: 1.6; --letterspacing: 0px; --fontweight: 500; --texttransform: none; --iconsize: 1em; } .hfg-is-group.has-primary-menu .inherit-ff{ --inheritedfw: 500; } .builder-item--header_search_responsive{ --iconsize: 15px; --formfieldfontsize: 14px;--formfieldborderwidth:2px;--formfieldborderradius:2px; --height: 40px;--padding:0 10px;--margin:0; } .footer-top-inner .row{ grid-template-columns:1fr 1fr 1fr; --valign: flex-start; } .footer-top{ --rowbcolor: var(--nv-light-bg); --color: var(--nv-text-color); --bgcolor: var(--nv-site-bg); } .footer-main-inner .row{ grid-template-columns:1fr 1fr 1fr; --valign: flex-start; } .footer-main{ --rowbcolor: var(--nv-light-bg); --color: var(--nv-text-color); --bgcolor: var(--nv-site-bg); } .footer-bottom-inner .row{ grid-template-columns:1fr 1fr 1fr; --valign: flex-start; } .footer-bottom{ --rowbcolor: var(--nv-light-bg); --color: var(--nv-text-dark-bg); --bgcolor: #39689c; } .builder-item--footer-one-widgets{ --padding:0;--margin:0; --textalign: left;--justify: flex-start; } @media(min-width: 576px){ :root{ --container: 992px;--postwidth:50%;--btnpadding:13px 15px;--primarybtnpadding:13px 15px;--secondarybtnpadding:calc(13px - 3px) calc(15px - 3px); --bodyfontsize: 16px; --bodylineheight: 1.6; --bodyletterspacing: 0px; --h1fontsize: 38px; --h1lineheight: 1.2; --h1letterspacing: 0px; --h2fontsize: 30px; --h2lineheight: 1.2; --h2letterspacing: 0px; --h3fontsize: 26px; --h3lineheight: 1.4; --h3letterspacing: 0px; --h4fontsize: 22px; --h4lineheight: 1.5; --h4letterspacing: 0px; --h5fontsize: 18px; --h5lineheight: 1.6; --h5letterspacing: 0px; --h6fontsize: 14px; --h6lineheight: 1.6; --h6letterspacing: 0px; } .single-post-container .alignfull > [class*="__inner-container"], .single-post-container .alignwide > [class*="__inner-container"]{ max-width:962px } .single-product .alignfull > [class*="__inner-container"], .single-product .alignwide > [class*="__inner-container"]{ max-width:962px } .nv-meta-list{ --avatarsize: 20px; } .single .nv-meta-list{ --avatarsize: 20px; } .nv-post-cover{ --height: 320px;--padding:60px 30px;--justify: flex-start; --textalign: left; --valign: center; } .nv-post-cover .nv-title-meta-wrap, .nv-page-title-wrap, .entry-header{ --textalign: left; } .nv-is-boxed.nv-title-meta-wrap{ --padding:60px 30px; } .nv-is-boxed.nv-comments-wrap{ --padding:30px; } .nv-is-boxed.comment-respond{ --padding:30px; } .single:not(.single-product), .page{ --c-vspace:0 0 0 0;; } .scroll-to-top{ --padding:8px 10px;--size:16px; } .header-menu-sidebar-bg{ --justify: flex-start; --textalign: left;--flexg: 1;--wrapdropdownwidth: auto; } .header-menu-sidebar{ width: 360px; } .builder-item--logo{ --maxwidth: 120px; --fs: 24px;--padding:10px 0;--margin:0; --textalign: left;--justify: flex-start; } .builder-item--nav-icon{ --label-margin:0 5px 0 0;;--padding:10px 15px;--margin:0; } .builder-item--primary-menu{ --spacing: 20px; --height: 25px;--padding:0;--margin:0; --fontsize: 1em; --lineheight: 1.6; --letterspacing: 0px; --iconsize: 1em; } .builder-item--header_search_responsive{ --formfieldfontsize: 14px;--formfieldborderwidth:2px;--formfieldborderradius:2px; --height: 40px;--padding:0 10px;--margin:0; } .builder-item--footer-one-widgets{ --padding:0;--margin:0; --textalign: left;--justify: flex-start; } }@media(min-width: 960px){ :root{ --container: 1170px;--postwidth:33.333333333333%;--btnpadding:13px 15px;--primarybtnpadding:13px 15px;--secondarybtnpadding:calc(13px - 3px) calc(15px - 3px); --bodyfontsize: 16px; --bodylineheight: 1.7; --bodyletterspacing: 0px; --h1fontsize: 40px; --h1lineheight: 1.1; --h1letterspacing: 0px; --h2fontsize: 32px; --h2lineheight: 1.2; --h2letterspacing: 0px; --h3fontsize: 28px; --h3lineheight: 1.4; --h3letterspacing: 0px; --h4fontsize: 24px; --h4lineheight: 1.5; --h4letterspacing: 0px; --h5fontsize: 20px; --h5lineheight: 1.6; --h5letterspacing: 0px; --h6fontsize: 16px; --h6lineheight: 1.6; --h6letterspacing: 0px; } body:not(.single):not(.archive):not(.blog):not(.search):not(.error404) .neve-main > .container .col, body.post-type-archive-course .neve-main > .container .col, body.post-type-archive-llms_membership .neve-main > .container .col{ max-width: 70%; } body:not(.single):not(.archive):not(.blog):not(.search):not(.error404) .nv-sidebar-wrap, body.post-type-archive-course .nv-sidebar-wrap, body.post-type-archive-llms_membership .nv-sidebar-wrap{ max-width: 30%; } .neve-main > .archive-container .nv-index-posts.col{ max-width: 100%; } .neve-main > .archive-container .nv-sidebar-wrap{ max-width: 0%; } .neve-main > .single-post-container .nv-single-post-wrap.col{ max-width: 80%; } .single-post-container .alignfull > [class*="__inner-container"], .single-post-container .alignwide > [class*="__inner-container"]{ max-width:906px } .container-fluid.single-post-container .alignfull > [class*="__inner-container"], .container-fluid.single-post-container .alignwide > [class*="__inner-container"]{ max-width:calc(80% + 15px) } .neve-main > .single-post-container .nv-sidebar-wrap{ max-width: 20%; } .archive.woocommerce .neve-main > .shop-container .nv-shop.col{ max-width: 70%; } .archive.woocommerce .neve-main > .shop-container .nv-sidebar-wrap{ max-width: 30%; } .single-product .neve-main > .shop-container .nv-shop.col{ max-width: 100%; } .single-product .alignfull > [class*="__inner-container"], .single-product .alignwide > [class*="__inner-container"]{ max-width:1140px } .single-product .container-fluid .alignfull > [class*="__inner-container"], .single-product .alignwide > [class*="__inner-container"]{ max-width:calc(100% + 15px) } .single-product .neve-main > .shop-container .nv-sidebar-wrap{ max-width: 0%; } .nv-meta-list{ --avatarsize: 20px; } .single .nv-meta-list{ --avatarsize: 20px; } .nv-post-cover{ --height: 400px;--padding:60px 40px;--justify: flex-start; --textalign: left; --valign: center; } .nv-post-cover .nv-title-meta-wrap, .nv-page-title-wrap, .entry-header{ --textalign: left; } .nv-is-boxed.nv-title-meta-wrap{ --padding:60px 40px; } .nv-is-boxed.nv-comments-wrap{ --padding:40px; } .nv-is-boxed.comment-respond{ --padding:40px; } .single:not(.single-product), .page{ --c-vspace:0 0 0 0;; } .scroll-to-top{ --padding:8px 10px;--size:16px; } .header-menu-sidebar-bg{ --justify: flex-start; --textalign: left;--flexg: 1;--wrapdropdownwidth: auto; } .header-menu-sidebar{ width: 360px; } .builder-item--logo{ --maxwidth: 120px; --fs: 24px;--padding:10px 0;--margin:0; --textalign: left;--justify: flex-start; } .builder-item--nav-icon{ --label-margin:0 5px 0 0;;--padding:10px 15px;--margin:0; } .builder-item--primary-menu{ --spacing: 20px; --height: 25px;--padding:0;--margin:0; --fontsize: 1em; --lineheight: 1.6; --letterspacing: 0px; --iconsize: 1em; } .builder-item--header_search_responsive{ --formfieldfontsize: 14px;--formfieldborderwidth:2px;--formfieldborderradius:2px; --height: 40px;--padding:0 10px;--margin:0; } .builder-item--footer-one-widgets{ --padding:0;--margin:0; --textalign: left;--justify: flex-start; } }.scroll-to-top {right: 20px; border: none; position: fixed; bottom: 30px; display: none; opacity: 0; visibility: hidden; transition: opacity 0.3s ease-in-out, visibility 0.3s ease-in-out; align-items: center; justify-content: center; z-index: 999; } @supports (-webkit-overflow-scrolling: touch) { .scroll-to-top { bottom: 74px; } } .scroll-to-top.image { background-position: center; } .scroll-to-top .scroll-to-top-image { width: 100%; height: 100%; } .scroll-to-top .scroll-to-top-label { margin: 0; padding: 5px; } .scroll-to-top:hover { text-decoration: none; } .scroll-to-top.scroll-to-top-left {left: 20px; right: unset;} .scroll-to-top.scroll-show-mobile { display: flex; } @media (min-width: 960px) { .scroll-to-top { display: flex; } }.scroll-to-top { color: var(--color); padding: var(--padding); border-radius: var(--borderradius); background: var(--bgcolor); } .scroll-to-top:hover, .scroll-to-top:focus { color: var(--hovercolor); background: var(--hoverbgcolor); } .scroll-to-top-icon, .scroll-to-top.image .scroll-to-top-image { width: var(--size); height: var(--size); } .scroll-to-top-image { background-image: var(--bgimage); background-size: cover; }:root{--nv-primary-accent:#39689c;--nv-secondary-accent:#39689c;--nv-site-bg:#ffffff;--nv-light-bg:#f4f5f7;--nv-dark-bg:#121212;--nv-text-color:#272626;--nv-text-dark-bg:#ffffff;--nv-c-1:#9463ae;--nv-c-2:#be574b;--nv-fallback-ff:Arial, Helvetica, sans-serif;}
/*# sourceURL=neve-style-inline-css */
</style>
<link rel='stylesheet' id='convertkit-admin-quicktags-css' href='https://bec-systems.com/wp-content/plugins/convertkit/resources/backend/css/quicktags.css?ver=3.3.3' media='all' />
<script data-wp-strategy="defer" defer id="fathom-snippet-js" src="https://cdn.usefathom.com/script.js" data-site="XTUUWEMJ"   data-no-minify></script>
<script id="jquery-core-js" src="https://bec-systems.com/wp-includes/js/jquery/jquery.min.js?ver=3.7.1"></script>
<script id="jquery-migrate-js" src="https://bec-systems.com/wp-includes/js/jquery/jquery-migrate.min.js?ver=3.4.1"></script>
<script data-wp-strategy="defer" defer id="wc-jquery-blockui-js" src="https://bec-systems.com/wp-content/plugins/woocommerce/assets/js/jquery-blockui/jquery.blockUI.min.js?ver=2.7.0-wc.10.7.0"></script>
<script id="wc-add-to-cart-js-extra">
var wc_add_to_cart_params = {"ajax_url":"/wp-admin/admin-ajax.php","wc_ajax_url":"/?wc-ajax=%%endpoint%%","i18n_view_cart":"View cart","cart_url":"https://bec-systems.com/cart/","is_cart":"","cart_redirect_after_add":"no"};
//# sourceURL=wc-add-to-cart-js-extra
</script>
<script data-wp-strategy="defer" defer id="wc-add-to-cart-js" src="https://bec-systems.com/wp-content/plugins/woocommerce/assets/js/frontend/add-to-cart.min.js?ver=10.7.0"></script>
<script data-wp-strategy="defer" defer id="wc-js-cookie-js" src="https://bec-systems.com/wp-content/plugins/woocommerce/assets/js/js-cookie/js.cookie.min.js?ver=2.1.4-wc.10.7.0"></script>
<script id="woocommerce-js-extra">
var woocommerce_params = {"ajax_url":"/wp-admin/admin-ajax.php","wc_ajax_url":"/?wc-ajax=%%endpoint%%","i18n_password_show":"Show password","i18n_password_hide":"Hide password"};
//# sourceURL=woocommerce-js-extra
</script>
<script data-wp-strategy="defer" defer id="woocommerce-js" src="https://bec-systems.com/wp-content/plugins/woocommerce/assets/js/frontend/woocommerce.min.js?ver=10.7.0"></script>
<script data-wp-strategy="defer" defer id="woocommerce-analytics-js" src="https://stats.wp.com/s-202624.js"></script>
<link rel="https://api.w.org/" href="https://bec-systems.com/wp-json/" /><link rel="alternate" title="JSON" type="application/json" href="https://bec-systems.com/wp-json/wp/v2/posts/40" /><link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://bec-systems.com/xmlrpc.php?rsd" />
<meta name="generator" content="WordPress 7.0" />
<meta name="generator" content="WooCommerce 10.7.0" />
<link rel="canonical" href="https://bec-systems.com/40/web-application-framework-embedded-linux/" />
<link rel='shortlink' href='https://bec-systems.com/?p=40' />
<meta property="og:title" name="og:title" content="How to Implement a Web Application Framework in an Embedded Linux System" />
<meta property="og:type" name="og:type" content="article" />
<meta property="og:image" name="og:image" content="https://bec-systems.com/wp-content/uploads/2009/01/web_app_framework1-1.jpg" />
<meta property="og:url" name="og:url" content="https://bec-systems.com/40/web-application-framework-embedded-linux/" />
<meta property="og:description" name="og:description" content="As devices are increasingly more networked, an embedded web server is becoming a standard way for users to interact with and configure an embedded device using a standard web browser. As an example, most pieces of networking equipment (such as routers and wireless access points) are configured this way. There are many ways to implementRead More &raquo;How to Implement a Web Application Framework in an Embedded Linux System" />
<meta property="og:locale" name="og:locale" content="en_US" />
<meta property="og:site_name" name="og:site_name" content="BEC Systems" />
<meta property="twitter:card" name="twitter:card" content="summary" />
<meta property="article:tag" name="article:tag" content="Embedded Linux" />
<meta property="article:tag" name="article:tag" content="Python" />
<meta property="article:tag" name="article:tag" content="Web Application" />
<meta property="article:section" name="article:section" content="Blog" />
<meta property="article:published_time" name="article:published_time" content="2009-01-09T11:48:33+00:00" />
<meta property="article:modified_time" name="article:modified_time" content="2026-04-08T14:04:55+00:00" />
<meta property="article:author" name="article:author" content="https://bec-systems.com/author/cbrake/" />
		<style>
			:root {
						}
		</style>
			<style>img#wpstats{display:none}</style>
			<noscript><style>.woocommerce-product-gallery{ opacity: 1 !important; }</style></noscript>
	<link rel="icon" href="https://bec-systems.com/wp-content/uploads/2023/09/bec_vector-square-1-100x100.png" sizes="32x32" />
<link rel="icon" href="https://bec-systems.com/wp-content/uploads/2023/09/bec_vector-square-1.png" sizes="192x192" />
<link rel="apple-touch-icon" href="https://bec-systems.com/wp-content/uploads/2023/09/bec_vector-square-1.png" />
<meta name="msapplication-TileImage" content="https://bec-systems.com/wp-content/uploads/2023/09/bec_vector-square-1.png" />
<style id="wp-custom-css">
code {
    background-color: #f4f5f7; }


</style>

	<link rel='stylesheet' id='wc-blocks-style-css' href='https://bec-systems.com/wp-content/plugins/woocommerce/assets/client/blocks/wc-blocks.css?ver=wc-10.7.0' media='all' />

</head>

<body  class="wp-singular post-template-default single single-post postid-40 single-format-standard wp-theme-neve theme-neve sensei-neve woocommerce-no-js  nv-blog-grid nv-sidebar-full-width menu_sidebar_slide_left" id="neve_body"  >
<div class="wrapper">
	
	<header class="header"  >
		<a class="neve-skip-link show-on-focus" href="#content" >
			Skip to content		</a>
		<div id="header-grid"  class="hfg_header site-header">
	
<nav class="header--row header-main hide-on-mobile hide-on-tablet layout-full-contained nv-navbar header--row"
	data-row-id="main" data-show-on="desktop">

	<div
		class="header--row-inner header-main-inner">
		<div class="container">
			<div
				class="row row--wrapper"
				data-section="hfg_header_layout_main" >
				<div class="hfg-slot left"><div class="builder-item desktop-left"><div class="item--inner builder-item--logo"
		data-section="title_tagline"
		data-item-id="logo">
	
<div class="site-logo">
	<a class="brand" href="https://bec-systems.com/" aria-label="BEC Systems Efficiently build connected, data-centric products." rel="home"><img width="146" height="48" src="https://bec-systems.com/wp-content/uploads/2023/09/bec_logo_blue_146x48-1-1.png" class="neve-site-logo skip-lazy" alt="" data-variant="logo" decoding="async" /></a></div>
	</div>

</div></div><div class="hfg-slot right"><div class="builder-item has-nav hfg-is-group has-primary-menu"><div class="item--inner builder-item--primary-menu has_menu"
		data-section="header_menu_primary"
		data-item-id="primary-menu">
	<div class="nv-nav-wrap">
	<div role="navigation" class="nav-menu-primary style-border-bottom m-style"
			aria-label="Primary Menu">

		<ul id="nv-primary-navigation-main" class="primary-menu-ul nav-ul menu-desktop"><li id="menu-item-2090" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-2090"><div class="wrap"><a href="https://bec-systems.com/about/">About</a></div></li>
<li id="menu-item-2089" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-2089"><div class="wrap"><a href="https://bec-systems.com/services/">Services</a></div></li>
<li id="menu-item-2447" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-2447"><div class="wrap"><a href="https://bec-systems.com/shop/">Shop</a></div></li>
<li id="menu-item-2092" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-2092"><div class="wrap"><a href="https://bec-systems.com/projects/">Projects</a></div></li>
<li id="menu-item-2109" class="menu-item menu-item-type-taxonomy menu-item-object-category current-post-ancestor current-menu-parent current-post-parent menu-item-2109"><div class="wrap"><a href="https://bec-systems.com/category/blog/">Blog</a></div></li>
<li id="menu-item-2405" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2405"><div class="wrap"><a href="https://daily.bec-systems.com">Platform Thinking</a></div></li>
<li id="menu-item-2297" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-2297"><div class="wrap"><a href="https://bec-systems.com/podcast/">Podcast</a></div></li>
<li id="menu-item-2380" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-2380"><div class="wrap"><a href="https://bec-systems.com/community/">Community</a></div></li>
<li id="menu-item-2449" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-2449"><div class="wrap"><a href="https://bec-systems.com/cart/">Cart</a></div></li>
<li id="menu-item-2787" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-2787"><div class="wrap"><a href="https://bec-systems.com/contact/">Contact</a></div></li>
</ul>	</div>
</div>

	</div>

<div class="item--inner builder-item--header_search_responsive"
		data-section="header_search_responsive"
		data-item-id="header_search_responsive">
	<div class="nv-search-icon-component" >
	<div  class="menu-item-nav-search canvas">
		<a aria-label="Search" href="#" class="nv-icon nv-search" >
				<svg width="15" height="15" viewbox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1216 832q0-185-131.5-316.5t-316.5-131.5-316.5 131.5-131.5 316.5 131.5 316.5 316.5 131.5 316.5-131.5 131.5-316.5zm512 832q0 52-38 90t-90 38q-54 0-90-38l-343-342q-179 124-399 124-143 0-273.5-55.5t-225-150-150-225-55.5-273.5 55.5-273.5 150-225 225-150 273.5-55.5 273.5 55.5 225 150 150 225 55.5 273.5q0 220-124 399l343 343q37 37 37 90z" /></svg>
			</a>		<div class="nv-nav-search" aria-label="search">
			<div class="form-wrap container responsive-search">
				
<form role="search"
	method="get"
	class="search-form"
	action="https://bec-systems.com/">
	<label>
		<span class="screen-reader-text">Search for...</span>
	</label>
	<input type="search"
		class="search-field"
		aria-label="Search"
		placeholder="Search for..."
		value=""
		name="s"/>
	<button type="submit"
			class="search-submit nv-submit"
			aria-label="Search">
					<span class="nv-search-icon-wrap">
				<span class="nv-icon nv-search" >
				<svg width="15" height="15" viewbox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1216 832q0-185-131.5-316.5t-316.5-131.5-316.5 131.5-131.5 316.5 131.5 316.5 316.5 131.5 316.5-131.5 131.5-316.5zm512 832q0 52-38 90t-90 38q-54 0-90-38l-343-342q-179 124-399 124-143 0-273.5-55.5t-225-150-150-225-55.5-273.5 55.5-273.5 150-225 225-150 273.5-55.5 273.5 55.5 225 150 150 225 55.5 273.5q0 220-124 399l343 343q37 37 37 90z" /></svg>
			</span>			</span>
			</button>
	</form>
			</div>
							<div class="close-container container responsive-search">
					<button  class="close-responsive-search" aria-label="Close"
												>
						<svg width="50" height="50" viewBox="0 0 20 20" fill="#555555"><path d="M14.95 6.46L11.41 10l3.54 3.54l-1.41 1.41L10 11.42l-3.53 3.53l-1.42-1.42L8.58 10L5.05 6.47l1.42-1.42L10 8.58l3.54-3.53z"/></svg>
					</button>
				</div>
					</div>
	</div>
</div>
	</div>

</div></div>							</div>
		</div>
	</div>
</nav>


<nav class="header--row header-main hide-on-desktop layout-full-contained nv-navbar header--row"
	data-row-id="main" data-show-on="mobile">

	<div
		class="header--row-inner header-main-inner">
		<div class="container">
			<div
				class="row row--wrapper"
				data-section="hfg_header_layout_main" >
				<div class="hfg-slot left"><div class="builder-item tablet-left mobile-left"><div class="item--inner builder-item--logo"
		data-section="title_tagline"
		data-item-id="logo">
	
<div class="site-logo">
	<a class="brand" href="https://bec-systems.com/" aria-label="BEC Systems Efficiently build connected, data-centric products." rel="home"><img width="146" height="48" src="https://bec-systems.com/wp-content/uploads/2023/09/bec_logo_blue_146x48-1-1.png" class="neve-site-logo skip-lazy" alt="" data-variant="logo" decoding="async" /></a></div>
	</div>

</div></div><div class="hfg-slot right"><div class="builder-item tablet-left mobile-left"><div class="item--inner builder-item--nav-icon"
		data-section="header_menu_icon"
		data-item-id="nav-icon">
	<div class="menu-mobile-toggle item-button navbar-toggle-wrapper">
	<button type="button" class=" navbar-toggle"
			value="Navigation Menu"
					aria-label="Navigation Menu "
			aria-expanded="false" onclick="if('undefined' !== typeof toggleAriaClick ) { toggleAriaClick() }">
					<span class="bars">
				<span class="icon-bar"></span>
				<span class="icon-bar"></span>
				<span class="icon-bar"></span>
			</span>
					<span class="screen-reader-text">Navigation Menu</span>
	</button>
</div> <!--.navbar-toggle-wrapper-->


	</div>

</div></div>							</div>
		</div>
	</div>
</nav>

<div
		id="header-menu-sidebar" class="header-menu-sidebar tcb menu-sidebar-panel slide_left hfg-pe"
		data-row-id="sidebar">
	<div id="header-menu-sidebar-bg" class="header-menu-sidebar-bg">
				<div class="close-sidebar-panel navbar-toggle-wrapper">
			<button type="button" class="hamburger is-active  navbar-toggle active" 					value="Navigation Menu"
					aria-label="Navigation Menu "
					aria-expanded="false" onclick="if('undefined' !== typeof toggleAriaClick ) { toggleAriaClick() }">
								<span class="bars">
						<span class="icon-bar"></span>
						<span class="icon-bar"></span>
						<span class="icon-bar"></span>
					</span>
								<span class="screen-reader-text">
			Navigation Menu					</span>
			</button>
		</div>
					<div id="header-menu-sidebar-inner" class="header-menu-sidebar-inner tcb ">
						<div class="builder-item has-nav"><div class="item--inner builder-item--primary-menu has_menu"
		data-section="header_menu_primary"
		data-item-id="primary-menu">
	<div class="nv-nav-wrap">
	<div role="navigation" class="nav-menu-primary style-border-bottom m-style"
			aria-label="Primary Menu">

		<ul id="nv-primary-navigation-sidebar" class="primary-menu-ul nav-ul menu-mobile"><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-2090"><div class="wrap"><a href="https://bec-systems.com/about/">About</a></div></li>
<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-2089"><div class="wrap"><a href="https://bec-systems.com/services/">Services</a></div></li>
<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-2447"><div class="wrap"><a href="https://bec-systems.com/shop/">Shop</a></div></li>
<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-2092"><div class="wrap"><a href="https://bec-systems.com/projects/">Projects</a></div></li>
<li class="menu-item menu-item-type-taxonomy menu-item-object-category current-post-ancestor current-menu-parent current-post-parent menu-item-2109"><div class="wrap"><a href="https://bec-systems.com/category/blog/">Blog</a></div></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2405"><div class="wrap"><a href="https://daily.bec-systems.com">Platform Thinking</a></div></li>
<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-2297"><div class="wrap"><a href="https://bec-systems.com/podcast/">Podcast</a></div></li>
<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-2380"><div class="wrap"><a href="https://bec-systems.com/community/">Community</a></div></li>
<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-2449"><div class="wrap"><a href="https://bec-systems.com/cart/">Cart</a></div></li>
<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-2787"><div class="wrap"><a href="https://bec-systems.com/contact/">Contact</a></div></li>
</ul>	</div>
</div>

	</div>

</div>					</div>
	</div>
</div>
<div class="header-menu-sidebar-overlay hfg-ov hfg-pe" onclick="if('undefined' !== typeof toggleAriaClick ) { toggleAriaClick() }"></div>
</div>
	</header>

	<style>.nav-ul li:focus-within .wrap.active + .sub-menu { opacity: 1; visibility: visible; }.nav-ul li.neve-mega-menu:focus-within .wrap.active + .sub-menu { display: grid; }.nav-ul li > .wrap { display: flex; align-items: center; position: relative; padding: 0 4px; }.nav-ul:not(.menu-mobile):not(.neve-mega-menu) > li > .wrap > a { padding-top: 1px }</style>

	
	<main id="content" class="neve-main">

	<div class="container single-post-container">
		<div class="row">
						<article id="post-40"
					class="nv-single-post-wrap col post-40 post type-post status-publish format-standard hentry category-blog tag-embedded-linux tag-python tag-web-application">
				<div class="entry-header" ><div class="nv-title-meta-wrap"><h1 class="title entry-title">How to Implement a Web Application Framework in an Embedded Linux System</h1><ul class="nv-meta-list"><li  class="meta author vcard "><span class="author-name fn">by <a href="https://bec-systems.com/author/cbrake/" title="Posts by Cliff Brake" rel="author">Cliff Brake</a></span></li><li class="meta date posted-on "><time class="entry-date published" datetime="2009-01-09T11:48:33+00:00" content="2009-01-09">2009-01-09</time><time class="updated" datetime="2026-04-08T14:04:55+00:00">2026-04-08</time></li></ul></div></div><div class="nv-content-wrap entry-content"><p>As devices are increasingly more networked, an embedded web server is becoming a standard way for users to interact with and configure an embedded device using a standard web browser.  As an example, most pieces of networking equipment (such as routers and wireless access points) are configured this way.  There are many ways to implement a web server.  One way is to just write a monolithic program that handles the requests and outputs HTML using print statements.  Without a lot of planning, you usually end up with something where logic is intermixed with presentation.  The disadvantage of such an approach is that it quickly becomes very difficult to maintain your web application as it grows and changes.  The current best practice with web application frameworks (such as Ruby on Rails) splits a web application into 3 distinct components (Model, View, Controller &#8212; MVC) so that changes to one component can be made with minimal impact to others.  This article details a solution used in a recent project to implement such an architecture  using the following open source components: SQLite, Clearsilver, and Python.  The challenge was to find a solution that performed acceptably on a resource constrained 130MHz ARM-Linux system.</p>
<h1>Components Used</h1>
<p>The requirements for the web application framework for this system are:</p>
<ul>
<li>Footprint must be fairly small &#8212; less than 10MiB.</li>
<li>Must enable us to implement a clean MVC type architecture.</li>
<li>Must support a high level language like python for rapid development.</li>
<li>Includes a database.</li>
<li>Reasonable performance &#8212; less than 1 second to render a typical page.</li>
</ul>
<p>After researching and testing several options, the following components were chosen to implement the framework:</p>
<ul>
<li>Web Server: Cherokee (1MiB)</li>
<li>Model: SQLite  (290KiB)</li>
<li>View: Clearsilver  (170KiB)</li>
<li>Controller: Python (2-3MiB)</li>
</ul>
<p><img fetchpriority="high" decoding="async" class="aligncenter size-full wp-image-46" title="web_app_framework1" src="https://bec-systems.com/wp-content/uploads/2009/01/web_app_framework1-1.jpg" alt="web_app_framework1" width="379" height="277" /></p>
<p>Total size for the above components is about 4MiB.</p>
<p>The following sequence occurs during a typical web transaction:</p>
<ul>
<li>An HTTP request is received by Cherokee</li>
<li>If the request matches the URI for the web application, Cherokee forwards the request to the web application framework via CGI.</li>
<li>Clearsilver parses the HTTP headers (including CGI GET and POST parameters) and provides the data to python in a easy to access HDF format.</li>
<li>Python looks at the URI and dispatches the request to the appropriate function.  Data is extracted from the SQLite database and an HDF datastructure is created.</li>
<li>Clearsilver is called to render the appropriate template.  Data from the HDF datastructure is used in the template to provide the dynamic content in the page.</li>
<li>The rendered HTML is passed back to Cherokee, and is then returned to the user&#8217;s web browser.</li>
</ul>
<p>Each component is discussed in more detail in the following sections.</p>
<h1>Performance</h1>
<p>One of the issues with modern web frameworks is that most require a lot of processing power.  Many frameworks are written in an interpreted language which tend to be not very efficient on embedded systems such as the 130MHz ARM-Linux system used in this project.  As most of the application development for this project is done in Python, I tried several other Python based solutions with the following results:</p>
<ul>
<li><strong>Django</strong>: takes <strong>10</strong> seconds to render a page</li>
<li><strong>webpy</strong>: takes <strong>5</strong> seconds to render a page</li>
<li><strong>Clearsilver/Python</strong>: takes about <strong>1</strong> second to render a page</li>
</ul>
<p>Anything over 1 second is very slow for a web interface.  With fastcgi, webpy could probably have been sped up to be acceptably fast, but I don&#8217;t think there is much hope for frameworks like django on this type of system.  I have read of similar experiences trying to run Ruby-on-Rails on ARM-Linux systems.  As I&#8217;m currently just using a basic CGI interface, the Clearsilver solution could also be sped up significantly as well, if the Python portion could be kept running between requests with fastcgi or a similar mechanism.</p>
<h1>Cherokee Web Server</h1>
<p>A web application typically consists of a web server (like Apache) and a program that provides the dynamic web content.  Some of the functions of a web server are:</p>
<ul>
<li>receives HTTP requests</li>
<li>handles the request by serving static files/images or routes the request to a program that outputs dynamic content</li>
<li>authentication</li>
<li>encryption (SSL, TLS)</li>
</ul>
<p>There are many web servers that can be used in embedded devices.  Some of them are:</p>
<ul>
<li>Lighttpd (<a href="http://www.lighttpd.net/">http://www.lighttpd.net</a> )</li>
<li>thttpd (<a href="http://www.acme.com/software/thttpd/">http://www.acme.com/software/thttpd/</a> )</li>
<li>Appweb (<a href="http://www.appwebserver.org/">http://www.appwebserver.org/</a> )</li>
<li>Boa (<a href="http://www.boa.org/">http://www.boa.org</a> )</li>
<li>Cherokee (<a href="http://www.cherokee-project.com/">http://www.cherokee-project.com</a> )</li>
<li>SHTTPD (<a href="http://shttpd.sourceforge.net/">http://shttpd.sourceforge.net/</a> )</li>
</ul>
<p>Cherokee was chosen for this application because it provides a good balance between the size and functionality I am looking for.  It is also included in the Openembedded (<a href="http://openembedded.org/">http://openembedded.org</a> ) build system I am using.  Other systems will have different requirements &#8212; use the one that fits your application best.</p>
<h1>Clearsilver</h1>
<p>Clearsilver (<a href="http://www.clearsilver.net/">http://www.clearsilver.net/</a> ) is the real gem that was discovered during this exercise.   Clearsilver is a language-neutral HTML template system written in C.  It is used as the templating system for many high volume sites such as Google Groups 2.  Clearsilver also provides CGI handling functions and bindings to several languages including Python.  The fact that it is written in C and is fast for high volume sites also makes it <em>fast enough</em> on slower embedded systems.  Because Clearsilver is written in C, the templating system is already fast.  Parts or all of the application can also be moved to C as needed to get the required performance.  Having a performance upgrade path is nice.  Clearsilver also forces a strict separation of application logic and presentation templates, which keeps things in line with the MVC architecture.</p>
<h1>SQLite</h1>
<p>SQLite (<a href="http://www.sqlite.org/">http://www.sqlite.org/</a> ) is a small C library that implements a self-contained, embeddable, zero-configuration SQL database engine.  SQLite works as expected and also has bindings to a number of languages including Python.  A SQLite database is just a single file that requires no configuration, making it very easy to use.  The database engine runs in the same process as the application using it, which increases performance because there is no context switch when running database operations.   Because SQLite does not have its own process, it does not handle concurrency as well as other databases such as MySQL, but in an embedded system you seldom have more than one process using the database.  SQLite provides some support for concurrency with reader/writer locks for the entire database.  If your application is not real busy, this is often adequate if you need two processes to share some data.</p>
<h1>Python</h1>
<p>Python is the glue that ties things together in this web application framework.  It sits between Clearsilver and the database.  The advantages of using a language like Python are rapid development and an extensive library.  Python is considerably slower than C, but there is always the option to move parts of the application into C as needed.</p>
<h1>Openembedded Build System</h1>
<p>How does one put together a system with all these components?  The answer is the Openembedded Build System (OE) (<a href="http://openembedded.org/">http://openembedded.org</a>).  OE includes support for all of the components discussed in this article.</p>
<h1>Summary</h1>
<p>The combination of Python, Clearsilver, and SQLite provides a compelling solution for a web application framework in an Embedded Linux System.  The solution is reasonably small, performs well, and provides a path to improve performance if needed.  We also get a clean architecture to create clean, maintainable web applications.</p>
<hr />
<p><strong>About the author</strong> &#8212; Cliff Brake owns BEC Systems, a consulting operation that helps customers utilize modern computer technologies in their products.  BEC offers a range of services to make your embedded project a success including technology selection, development, troubleshooting, and training.  Please visit our website (<a href="../../">http://bec-systems.com</a> ) for more information and other free resources.</p>
<script async data-uid="be19fa32ef" src="https://tmpdir.kit.com/be19fa32ef/index.js" data-jetpack-boost="ignore" data-no-defer="1" data-no-optimize="1" nowprocket></script></div><div class="nv-tags-list"><span>Tags:</span><a href=https://bec-systems.com/tag/embedded-linux/ title="Embedded Linux" class=embedded-linux rel="tag">Embedded Linux</a><a href=https://bec-systems.com/tag/python/ title="Python" class=python rel="tag">Python</a><a href=https://bec-systems.com/tag/web-application/ title="Web Application" class=web-application rel="tag">Web Application</a> </div> 
<div id="comments" class="comments-area">
	</div>
			</article>
					</div>
	</div>

</main><!--/.neve-main-->

<button tabindex="0" id="scroll-to-top" class="scroll-to-top scroll-to-top-right  scroll-show-mobile icon" aria-label="Scroll To Top"><svg class="scroll-to-top-icon" aria-hidden="true" role="img" xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 15 15"><rect width="15" height="15" fill="none"/><path fill="currentColor" d="M2,8.48l-.65-.65a.71.71,0,0,1,0-1L7,1.14a.72.72,0,0,1,1,0l5.69,5.7a.71.71,0,0,1,0,1L13,8.48a.71.71,0,0,1-1,0L8.67,4.94v8.42a.7.7,0,0,1-.7.7H7a.7.7,0,0,1-.7-.7V4.94L3,8.47a.7.7,0,0,1-1,0Z"/></svg></button><footer class="site-footer" id="site-footer"  >
	<div class="hfg_footer">
		<div class="footer--row footer-bottom hide-on-mobile hide-on-tablet layout-full-contained"
	id="cb-row--footer-desktop-bottom"
	data-row-id="bottom" data-show-on="desktop">
	<div
		class="footer--row-inner footer-bottom-inner footer-content-wrap">
		<div class="container">
			<div
				class="hfg-grid nv-footer-content hfg-grid-bottom row--wrapper row "
				data-section="hfg_footer_layout_bottom" >
				<div class="hfg-slot left"><div class="builder-item cr"><div class="item--inner"><div class="component-wrap"><div><p><a href="https://themeisle.com/themes/neve/" rel="nofollow">Neve</a> | Powered by <a href="https://wordpress.org" rel="nofollow">WordPress</a></p></div></div></div></div></div><div class="hfg-slot c-left"></div><div class="hfg-slot center"><div class="builder-item desktop-left tablet-left mobile-left"><div class="item--inner builder-item--footer-one-widgets"
		data-section="neve_sidebar-widgets-footer-one-widgets"
		data-item-id="footer-one-widgets">
		<div class="widget-area">
		<div id="block-9" class="widget widget_block widget_text">
<p class="wp-block-paragraph"><em>©</em> BEC Systems</p>
</div>	</div>
	</div>

</div></div>							</div>
		</div>
	</div>
</div>

<div class="footer--row footer-bottom hide-on-desktop layout-full-contained"
	id="cb-row--footer-mobile-bottom"
	data-row-id="bottom" data-show-on="mobile">
	<div
		class="footer--row-inner footer-bottom-inner footer-content-wrap">
		<div class="container">
			<div
				class="hfg-grid nv-footer-content hfg-grid-bottom row--wrapper row "
				data-section="hfg_footer_layout_bottom" >
				<div class="hfg-slot left"><div class="builder-item cr"><div class="item--inner"><div class="component-wrap"><div><p><a href="https://themeisle.com/themes/neve/" rel="nofollow">Neve</a> | Powered by <a href="https://wordpress.org" rel="nofollow">WordPress</a></p></div></div></div></div></div><div class="hfg-slot c-left"></div><div class="hfg-slot center"><div class="builder-item desktop-left tablet-left mobile-left"><div class="item--inner builder-item--footer-one-widgets"
		data-section="neve_sidebar-widgets-footer-one-widgets"
		data-item-id="footer-one-widgets">
		<div class="widget-area">
		<div id="block-9" class="widget widget_block widget_text">
<p class="wp-block-paragraph"><em>©</em> BEC Systems</p>
</div>	</div>
	</div>

</div></div>							</div>
		</div>
	</div>
</div>

	</div>
</footer>

</div><!--/.wrapper-->
<script type="speculationrules">
{"prefetch":[{"source":"document","where":{"and":[{"href_matches":"/*"},{"not":{"href_matches":["/wp-*.php","/wp-admin/*","/wp-content/uploads/*","/wp-content/*","/wp-content/plugins/*","/wp-content/themes/neve/*","/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]}
</script>
	<script>
		(function () {
			var c = document.body.className;
			c = c.replace(/woocommerce-no-js/, 'woocommerce-js');
			document.body.className = c;
		})();
	</script>
	<script id="convertkit-js-js-extra">
var convertkit_broadcasts = {"ajax_url":"https://bec-systems.com/wp-json/kit/v1/broadcasts","debug":""};
var convertkit = {"ajaxurl":"https://bec-systems.com/wp-json/kit/v1/subscriber/store-email-as-id-in-cookie","debug":"","nonce":"1278e54f31","subscriber_id":"0"};
//# sourceURL=convertkit-js-js-extra
</script>
<script id="convertkit-js-js" src="https://bec-systems.com/wp-content/plugins/convertkit/resources/frontend/js/dist/frontend.min.js?ver=3.3.3"></script>
<script id="neve-script-js-extra">
var NeveProperties = {"ajaxurl":"https://bec-systems.com/wp-admin/admin-ajax.php","nonce":"1278e54f31","isRTL":"","isCustomize":""};
//# sourceURL=neve-script-js-extra
</script>
<script id="neve-script-js" src="https://bec-systems.com/wp-content/themes/neve/assets/js/build/modern/frontend.js?ver=4.2.4" async></script>
<script id="neve-script-js-after">
	var html = document.documentElement;
	var theme = html.getAttribute('data-neve-theme') || 'light';
	var variants = {"logo":{"light":{"src":"https:\/\/bec-systems.com\/wp-content\/uploads\/2023\/09\/bec_logo_blue_146x48-1-1.png","srcset":false,"sizes":"(max-width: 146px) 100vw, 146px"},"dark":{"src":"https:\/\/bec-systems.com\/wp-content\/uploads\/2023\/09\/bec_logo_blue_146x48-1-1.png","srcset":false,"sizes":"(max-width: 146px) 100vw, 146px"},"same":true}};

	function setCurrentTheme( theme ) {
		var pictures = document.getElementsByClassName( 'neve-site-logo' );
		for(var i = 0; i<pictures.length; i++) {
			var picture = pictures.item(i);
			if( ! picture ) {
				continue;
			};
			var fileExt = picture.src.slice((Math.max(0, picture.src.lastIndexOf(".")) || Infinity) + 1);
			if ( fileExt === 'svg' ) {
				picture.removeAttribute('width');
				picture.removeAttribute('height');
				picture.style = 'width: var(--maxwidth)';
			}
			var compId = picture.getAttribute('data-variant');
			if ( compId && variants[compId] ) {
				var isConditional = variants[compId]['same'];
				if ( theme === 'light' || isConditional || variants[compId]['dark']['src'] === false ) {
					picture.src = variants[compId]['light']['src'];
					picture.srcset = variants[compId]['light']['srcset'] || '';
					picture.sizes = variants[compId]['light']['sizes'];
					continue;
				};
				picture.src = variants[compId]['dark']['src'];
				picture.srcset = variants[compId]['dark']['srcset'] || '';
				picture.sizes = variants[compId]['dark']['sizes'];
			};
		};
	};

	var observer = new MutationObserver(function(mutations) {
		mutations.forEach(function(mutation) {
			if (mutation.type == 'attributes') {
				theme = html.getAttribute('data-neve-theme');
				setCurrentTheme(theme);
			};
		});
	});

	observer.observe(html, {
		attributes: true
	});
function toggleAriaClick() { function toggleAriaExpanded(toggle = 'true') { document.querySelectorAll('button.navbar-toggle').forEach(function(el) { if ( el.classList.contains('caret-wrap') ) { return; } el.setAttribute('aria-expanded', 'true' === el.getAttribute('aria-expanded') ? 'false' : toggle); }); } toggleAriaExpanded(); if ( document.body.hasAttribute('data-ftrap-listener') ) { return; } document.body.setAttribute('data-ftrap-listener', 'true'); document.addEventListener('ftrap-end', function() { toggleAriaExpanded('false'); }); }
//# sourceURL=neve-script-js-after
</script>
<script id="neve-scroll-to-top-js-extra">
var neveScrollOffset = {"offset":"0"};
//# sourceURL=neve-scroll-to-top-js-extra
</script>
<script id="neve-scroll-to-top-js" src="https://bec-systems.com/wp-content/themes/neve/assets/js/build/modern/scroll-to-top.js?ver=4.2.4" async></script>
<script id="wp-polyfill-js" src="https://bec-systems.com/wp-includes/js/dist/vendor/wp-polyfill.min.js?ver=3.15.0"></script>
<script data-wp-strategy="defer" defer id="woocommerce-analytics-client-js" src="https://bec-systems.com/wp-content/plugins/jetpack/jetpack_vendor/automattic/woocommerce-analytics/build/woocommerce-analytics-client.js?minify=false&#038;ver=e434986d5efc1358e217"></script>
<script id="quicktags-js-extra">
var quicktagsL10n = {"closeAllOpenTags":"Close all open tags","closeTags":"close tags","enterURL":"Enter the URL","enterImageURL":"Enter the URL of the image","enterImageDescription":"Enter a description of the image","textdirection":"text direction","toggleTextdirection":"Toggle Editor Text Direction","dfw":"Distraction-free writing mode","strong":"Bold","strongClose":"Close bold tag","em":"Italic","emClose":"Close italic tag","link":"Insert link","blockquote":"Blockquote","blockquoteClose":"Close blockquote tag","del":"Deleted text (strikethrough)","delClose":"Close deleted text tag","ins":"Inserted text","insClose":"Close inserted text tag","image":"Insert image","ul":"Bulleted list","ulClose":"Close bulleted list tag","ol":"Numbered list","olClose":"Close numbered list tag","li":"List item","liClose":"Close list item tag","code":"Code","codeClose":"Close code tag","more":"Insert Read More tag"};
//# sourceURL=quicktags-js-extra
</script>
<script id="quicktags-js" src="https://bec-systems.com/wp-includes/js/quicktags.min.js?ver=7.0"></script>
<script id="convertkit-admin-quicktags-js-extra">
var convertkit_quicktags = {"broadcasts":{"title":"Kit Broadcasts","icon":"resources/backend/images/block-icon-broadcasts.svg","attributes":{"display_grid":{"type":"boolean","default":false},"display_order":{"type":"string","default":"date-broadcast"},"date_format":{"type":"string","default":"F j, Y"},"display_image":{"type":"boolean","default":false},"display_description":{"type":"boolean","default":false},"display_read_more":{"type":"boolean","default":false},"read_more_label":{"type":"string","default":"Read more"},"limit":{"type":"number","default":10},"page":{"type":"number","default":1},"paginate":{"type":"boolean","default":false},"paginate_label_prev":{"type":"string","default":"Previous"},"paginate_label_next":{"type":"string","default":"Next"},"style":{"type":"object"},"backgroundColor":{"type":"string"},"textColor":{"type":"string"},"fontSize":{"type":"string"},"is_gutenberg_example":{"type":"boolean","default":false}},"render_callback":[{},"render"]},"content":{"title":"Kit Custom Content","icon":"resources/backend/images/block-icon-content.svg","attributes":{"tag":{"type":"string"}},"render_callback":[{},"render"]},"formtrigger":{"title":"Kit Form Trigger","icon":"resources/backend/images/block-icon-formtrigger.svg","attributes":{"form":{"type":"string","default":""},"text":{"type":"string","default":"Subscribe"},"style":{"type":"object"},"backgroundColor":{"type":"string"},"textColor":{"type":"string"},"fontSize":{"type":"string"},"is_gutenberg_example":{"type":"boolean","default":false}},"render_callback":[{},"render"]},"form":{"title":"Kit Form","icon":"resources/backend/images/block-icon-form.svg","attributes":{"form":{"type":"string"},"align":{"type":"string"},"style":{"type":"object"},"backgroundColor":{"type":"string"},"is_gutenberg_example":{"type":"boolean","default":false}},"render_callback":[{},"render"]},"product":{"title":"Kit Product","icon":"resources/backend/images/block-icon-product.svg","attributes":{"product":{"type":"string","default":""},"text":{"type":"string","default":"Buy my product"},"discount_code":{"type":"string","default":""},"checkout":{"type":"boolean","default":false},"disable_modal_on_mobile":{"type":"boolean","default":false},"style":{"type":"object"},"backgroundColor":{"type":"string"},"textColor":{"type":"string"},"fontSize":{"type":"string"},"is_gutenberg_example":{"type":"boolean","default":false}},"render_callback":[{},"render"]}};
var convertkit_admin_tinymce = {"ajaxurl":"https://bec-systems.com/wp-json/kit/v1/editor/tinymce/modal","nonce":"1278e54f31"};
//# sourceURL=convertkit-admin-quicktags-js-extra
</script>
<script id="convertkit-admin-quicktags-js" src="https://bec-systems.com/wp-content/plugins/convertkit/resources/backend/js/quicktags.js?ver=3.3.3"></script>
<script id="sourcebuster-js-js" src="https://bec-systems.com/wp-content/plugins/woocommerce/assets/js/sourcebuster/sourcebuster.min.js?ver=10.7.0"></script>
<script id="wc-order-attribution-js-extra">
var wc_order_attribution = {"params":{"lifetime":1.0e-5,"session":30,"base64":false,"ajaxurl":"https://bec-systems.com/wp-admin/admin-ajax.php","prefix":"wc_order_attribution_","allowTracking":true},"fields":{"source_type":"current.typ","referrer":"current_add.rf","utm_campaign":"current.cmp","utm_source":"current.src","utm_medium":"current.mdm","utm_content":"current.cnt","utm_id":"current.id","utm_term":"current.trm","utm_source_platform":"current.plt","utm_creative_format":"current.fmt","utm_marketing_tactic":"current.tct","session_entry":"current_add.ep","session_start_time":"current_add.fd","session_pages":"session.pgs","session_count":"udata.vst","user_agent":"udata.uag"}};
//# sourceURL=wc-order-attribution-js-extra
</script>
<script id="wc-order-attribution-js" src="https://bec-systems.com/wp-content/plugins/woocommerce/assets/js/frontend/order-attribution.min.js?ver=10.7.0"></script>
<script id="jetpack-stats-js-before">
_stq = window._stq || [];
_stq.push([ "view", {"v":"ext","blog":"227062703","post":"40","tz":"0","srv":"bec-systems.com","j":"1:15.8"} ]);
_stq.push([ "clickTrackerInit", "227062703", "40" ]);
//# sourceURL=jetpack-stats-js-before
</script>
<script data-wp-strategy="defer" defer id="jetpack-stats-js" src="https://stats.wp.com/e-202624.js"></script>
		<script type="text/template" id="tmpl-convertkit-quicktags-modal">
			<div id="convertkit-quicktags-modal">
				<div class="media-frame-title"><h1></h1></div>
				<div class="media-frame-content"></div>
				<div class="media-frame-toolbar">
					<div class="media-toolbar">
						<div class="media-toolbar-secondary">
							<button type="button" class="button button-large cancel">Cancel</button>
						</div>
						<div class="media-toolbar-primary">
							<button type="button" class="button button-primary button-large">Insert</button>
						</div>
					</div>
				</div>
			</div>
		</script>
		<script id="wp-emoji-settings" type="application/json">
{"baseUrl":"https://s.w.org/images/core/emoji/17.0.2/72x72/","ext":".png","svgUrl":"https://s.w.org/images/core/emoji/17.0.2/svg/","svgExt":".svg","source":{"concatemoji":"https://bec-systems.com/wp-includes/js/wp-emoji-release.min.js?ver=7.0"}}
</script>
<script type="module">
/*! This file is auto-generated */
const a=JSON.parse(document.getElementById("wp-emoji-settings").textContent),o=(window._wpemojiSettings=a,"wpEmojiSettingsSupports"),s=["flag","emoji"];function i(e){try{var t={supportTests:e,timestamp:(new Date).valueOf()};sessionStorage.setItem(o,JSON.stringify(t))}catch(e){}}function c(e,t,n){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);t=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data);e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(n,0,0);const a=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data);return t.every((e,t)=>e===a[t])}function p(e,t){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);var n=e.getImageData(16,16,1,1);for(let e=0;e<n.data.length;e++)if(0!==n.data[e])return!1;return!0}function u(e,t,n,a){switch(t){case"flag":return n(e,"\ud83c\udff3\ufe0f\u200d\u26a7\ufe0f","\ud83c\udff3\ufe0f\u200b\u26a7\ufe0f")?!1:!n(e,"\ud83c\udde8\ud83c\uddf6","\ud83c\udde8\u200b\ud83c\uddf6")&&!n(e,"\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f","\ud83c\udff4\u200b\udb40\udc67\u200b\udb40\udc62\u200b\udb40\udc65\u200b\udb40\udc6e\u200b\udb40\udc67\u200b\udb40\udc7f");case"emoji":return!a(e,"\ud83e\u1fac8")}return!1}function f(e,t,n,a){let r;const o=(r="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?new OffscreenCanvas(300,150):document.createElement("canvas")).getContext("2d",{willReadFrequently:!0}),s=(o.textBaseline="top",o.font="600 32px Arial",{});return e.forEach(e=>{s[e]=t(o,e,n,a)}),s}function r(e){var t=document.createElement("script");t.src=e,t.defer=!0,document.head.appendChild(t)}a.supports={everything:!0,everythingExceptFlag:!0},new Promise(t=>{let n=function(){try{var e=JSON.parse(sessionStorage.getItem(o));if("object"==typeof e&&"number"==typeof e.timestamp&&(new Date).valueOf()<e.timestamp+604800&&"object"==typeof e.supportTests)return e.supportTests}catch(e){}return null}();if(!n){if("undefined"!=typeof Worker&&"undefined"!=typeof OffscreenCanvas&&"undefined"!=typeof URL&&URL.createObjectURL&&"undefined"!=typeof Blob)try{var e="postMessage("+f.toString()+"("+[JSON.stringify(s),u.toString(),c.toString(),p.toString()].join(",")+"));",a=new Blob([e],{type:"text/javascript"});const r=new Worker(URL.createObjectURL(a),{name:"wpTestEmojiSupports"});return void(r.onmessage=e=>{i(n=e.data),r.terminate(),t(n)})}catch(e){}i(n=f(s,u,c,p))}t(n)}).then(e=>{for(const n in e)a.supports[n]=e[n],a.supports.everything=a.supports.everything&&a.supports[n],"flag"!==n&&(a.supports.everythingExceptFlag=a.supports.everythingExceptFlag&&a.supports[n]);var t;a.supports.everythingExceptFlag=a.supports.everythingExceptFlag&&!a.supports.flag,a.supports.everything||((t=a.source||{}).concatemoji?r(t.concatemoji):t.wpemoji&&t.twemoji&&(r(t.twemoji),r(t.wpemoji)))});
//# sourceURL=https://bec-systems.com/wp-includes/js/wp-emoji-loader.min.js
</script>
		<script type="text/javascript">
			(function() {
				window.wcAnalytics = window.wcAnalytics || {};
				const wcAnalytics = window.wcAnalytics;

				// Set the assets URL for webpack to find the split assets.
				wcAnalytics.assets_url = 'https://bec-systems.com/wp-content/plugins/jetpack/jetpack_vendor/automattic/woocommerce-analytics/src/../build/';

				// Set the REST API tracking endpoint URL.
								wcAnalytics.trackEndpoint = "https://bec-systems.com/wp-json/woocommerce-analytics/v1/track";

				// Set common properties for all events.
				wcAnalytics.commonProps = {"session_id":null,"landing_page":null,"is_engaged":null,"ui":0,"blog_id":227062703,"store_id":"1fc3e244-2891-4bf5-8aad-4959e420854e","url":"https://bec-systems.com","woo_version":"10.7.0","wp_version":"7.0","store_admin":0,"device":"desktop","store_currency":"USD","timezone":"+00:00","is_guest":1,"_via_ua":"FeedBurner/1.0 (http://www.FeedBurner.com)","_via_ip":"142.250.33.36","_lg":"","_dr":"","_dl":"https://bec-systems.com/40/web-application-framework-embedded-linux/?option=com_rd_rss\u0026id=2\u0026Itemid=40","_via_ref":""};

				// Set the event queue.
				wcAnalytics.eventQueue = [];

				// Features.
				wcAnalytics.features = {
					ch: false,
					sessionTracking: false,
					proxy: false,
				};

				wcAnalytics.breadcrumbs = ["Blog","How to Implement a Web Application Framework in an Embedded Linux System"];

				// Page context flags.
				wcAnalytics.pages = {
					isAccountPage: false,
					isCart: false,
				};
			})();
		</script>
		</body>

</html>
