1<!DOCTYPE html> 2<html lang="en" dir="ltr" prefix="content: http://purl.org/rss/1.0/modules/content/ dc: http://purl.org/dc/terms/ foaf: http://xmlns.com/foaf/0.1/ og: http://ogp.me/ns# rdfs: http://www.w3.org/2000/01/rdf-schema# schema: http://schema.org/ sioc: http://rdfs.org/sioc/ns# sioct: http://rdfs.org/sioc/types# skos: http://www.w3.org/2004/02/skos/core# xsd: http://www.w3.org/2001/XMLSchema# " class="no-js wf-loading"> 3 <head> 4 <meta charset="utf-8" /> 5<meta name="Generator" content="Drupal 9 (https://www.drupal.org)" /> 6<meta name="MobileOptimized" content="width" /> 7<meta name="HandheldFriendly" content="true" /> 8<meta name="viewport" content="width=device-width, initial-scale=1.0" /> 9<link rel="icon" href="/themes/linuxjournal/favicon.ico" type="image/vnd.microsoft.icon" /> 10 11 <title>Contact | Linux Journal</title> 12 <link rel="stylesheet" media="all" href="/core/modules/system/css/components/align.module.css?tfpujm" /> 13<link rel="stylesheet" media="all" href="/core/modules/system/css/components/fieldgroup.module.css?tfpujm" /> 14<link rel="stylesheet" media="all" href="/core/modules/system/css/components/container-inline.module.css?tfpujm" /> 15<link rel="stylesheet" media="all" href="/core/modules/system/css/components/clearfix.module.css?tfpujm" /> 16<link rel="stylesheet" media="all" href="/core/modules/system/css/components/details.module.css?tfpujm" /> 17<link rel="stylesheet" media="all" href="/core/modules/system/css/components/hidden.module.css?tfpujm" /> 18<link rel="stylesheet" media="all" href="/core/modules/system/css/components/item-list.module.css?tfpujm" /> 19<link rel="stylesheet" media="all" href="/core/modules/system/css/components/js.module.css?tfpujm" /> 20<link rel="stylesheet" media="all" href="/core/modules/system/css/components/nowrap.module.css?tfpujm" /> 21<link rel="stylesheet" media="all" href="/core/modules/system/css/components/position-container.module.css?tfpujm" /> 22<link rel="stylesheet" media="all" href="/core/modules/system/css/components/progress.module.css?tfpujm" /> 23<link rel="stylesheet" media="all" href="/core/modules/system/css/components/reset-appearance.module.css?tfpujm" /> 24<link rel="stylesheet" media="all" href="/core/modules/system/css/components/resize.module.css?tfpujm" /> 25<link rel="stylesheet" media="all" href="/core/modules/system/css/components/sticky-header.module.css?tfpujm" /> 26<link rel="stylesheet" media="all" href="/core/modules/system/css/components/system-status-counter.css?tfpujm" /> 27<link rel="stylesheet" media="all" href="/core/modules/system/css/components/system-status-report-counters.css?tfpujm" /> 28<link rel="stylesheet" media="all" href="/core/modules/system/css/components/system-status-report-general-info.css?tfpujm" /> 29<link rel="stylesheet" media="all" href="/core/modules/system/css/components/tablesort.module.css?tfpujm" /> 30<link rel="stylesheet" media="all" href="/core/modules/system/css/components/tree-child.module.css?tfpujm" /> 31<link rel="stylesheet" media="all" href="/modules/contrib/poll/css/poll.base.css?tfpujm" /> 32<link rel="stylesheet" media="all" href="/modules/contrib/poll/css/poll.theme.css?tfpujm" /> 33<link rel="stylesheet" media="all" href="/modules/contrib/webform/css/webform.element.message.css?tfpujm" /> 34<link rel="stylesheet" media="all" href="/core/modules/views/css/views.module.css?tfpujm" /> 35<link rel="stylesheet" media="all" href="/modules/contrib/webform/css/webform.form.css?tfpujm" /> 36<link rel="stylesheet" media="all" href="/modules/contrib/webform/css/webform.element.details.toggle.css?tfpujm" /> 37<link rel="stylesheet" media="all" href="/modules/contrib/webform/modules/webform_bootstrap/css/webform_bootstrap.css?tfpujm" /> 38<link rel="stylesheet" media="all" href="/libraries/shariff/shariff.complete.css?tfpujm" /> 39<link rel="stylesheet" media="all" href="/themes/linuxjournal/css/style.css?tfpujm" /> 40<link rel="stylesheet" media="all" href="/themes/linuxjournal/css/fonts.css?tfpujm" /> 41 42 <!--
42<script defer src="https://use.fontawesome.com/releases/v5.0.9/js/all.js" integrity="sha384-8iPTk2s/jMVj81dnzb/iFR2sdA7u06vHJyyLlAd4snFpCl/SnyUjRrbdJsw1pGIl" crossorigin="anonymous"></script>
42--> 43 44
vendor: 4,605 bytes, lines 44-70
44<script> 45 // Non-blocking webfonts. 46 (function iife() { 47 'use strict'; 48 49 // JS is able to start executing. 50 document.documentElement.classList.remove('no-js'); 51 52 // Optimization for Repeat Views 53 // Stop early for repeat views that have already cached fonts. 54 if (sessionStorage.fontsLoadedLateef && sessionStorage.fontsLoadedOpensans /* && sessionStorage.fontsLoadedNEWFONT */) { 55 document.documentElement.classList.remove('wf-loading'); 56 document.documentElement.classList.add('wf-opensans'); 57 document.documentElement.classList.add('wf-lateef'); 58 // document.documentElement.classList.add('wf-NEWFONT'); 59 return; 60 } 61 62 // Inlined Font Face Observer script + Promise polyfill. 63 /*! Font Face Observer v2.0.13 - © Bram Stein. License: BSD-3-Clause */ 64 (function(){'use strict';var f,g=[];function l(a){g.push(a);1==g.length&&f()}function m(){for(;g.length;)g[0](),g.shift()}f=function(){setTimeout(m)};function n(a){this.a=p;this.b=void 0;this.f=[];var b=this;try{a(function(a){q(b,a)},function(a){r(b,a)})}catch(c){r(b,c)}}var p=2;function t(a){return new n(function(b,c){c(a)})}function u(a){return new n(function(b){b(a)})}function q(a,b){if(a.a==p){if(b==a)throw new TypeError;var c=!1;try{var d=b&&b.then;if(null!=b&&"object"==typeof b&&"function"==typeof d){d.call(b,function(b){c||q(a,b);c=!0},function(b){c||r(a,b);c=!0});return}}catch(e){c||r(a,e);return}a.a=0;a.b=b;v(a)}} 65 function r(a,b){if(a.a==p){if(b==a)throw new TypeError;a.a=1;a.b=b;v(a)}}function v(a){l(function(){if(a.a!=p)for(;a.f.length;){var b=a.f.shift(),c=b[0],d=b[1],e=b[2],b=b[3];try{0==a.a?"function"==typeof c?e(c.call(void 0,a.b)):e(a.b):1==a.a&&("function"==typeof d?e(d.call(void 0,a.b)):b(a.b))}catch(h){b(h)}}})}n.prototype.g=function(a){return this.c(void 0,a)};n.prototype.c=function(a,b){var c=this;return new n(function(d,e){c.f.push([a,b,d,e]);v(c)})}; 66 function w(a){return new n(function(b,c){function d(c){return function(d){h[c]=d;e+=1;e==a.length&&b(h)}}var e=0,h=[];0==a.length&&b(h);for(var k=0;k<a.length;k+=1)u(a[k]).c(d(k),c)})}function x(a){return new n(function(b,c){for(var d=0;d<a.length;d+=1)u(a[d]).c(b,c)})};window.Promise||(window.Promise=n,window.Promise.resolve=u,window.Promise.reject=t,window.Promise.race=x,window.Promise.all=w,window.Promise.prototype.then=n.prototype.c,window.Promise.prototype["catch"]=n.prototype.g);}()); 67 68 (function(){function l(a,b){document.addEventListener?a.addEventListener("scroll",b,!1):a.attachEvent("scroll",b)}function m(a){document.body?a():document.addEventListener?document.addEventListener("DOMContentLoaded",function c(){document.removeEventListener("DOMContentLoaded",c);a()}):document.attachEvent("onreadystatechange",function k(){if("interactive"==document.readyState||"complete"==document.readyState)document.detachEvent("onreadystatechange",k),a()})};function r(a){this.a=document.createElement("div");this.a.setAttribute("aria-hidden","true");this.a.appendChild(document.createTextNode(a));this.b=document.createElement("span");this.c=document.createElement("span");this.h=document.createElement("span");this.f=document.createElement("span");this.g=-1;this.b.style.cssText="max-width:none;display:inline-block;position:absolute;height:100%;width:100%;overflow:scroll;font-size:16px;";this.c.style.cssText="max-width:none;display:inline-block;position:absolute;height:100%;width:100%;overflow:scroll;font-size:16px;"; 69 this.f.style.cssText="max-width:none;display:inline-block;position:absolute;height:100%;width:100%;overflow:scroll;font-size:16px;";this.h.style.cssText="display:inline-block;width:200%;height:200%;font-size:16px;max-width:none;";this.b.appendChild(this.h);this.c.appendChild(this.f);this.a.appendChild(this.b);this.a.appendChild(this.c)} 70 function t(a,b){a.a.style.cssText="max-width:none;min-width:20px;min-height:20px;display:inline-block;overflow:hidden;position:absolute;width:auto;margin:0;padding:0;top:-999px;white-space:nowrap;font-synthesis:none;font:"+b+";"}function y(a){var b=a.a.offsetWidth,c=b+100;a.f.style.width=c+"px";a.c.scrollLeft=c;a.b.scrollLeft=a.b.scrollWidth+100;return a.g!==b?(a.g=b,!0):!1}function z(a,b){function c(){var a=k;y(a)&&a.a.parentNode&&b(a.g)}var k=a;l(a.b,c);l(a.c,c);y(a)};function A(a,b){var c=b||{};this.family=a;this.style=c.style||"normal";this.weight=c.weight||"normal";this.stretch=c.stretch||"normal"}var B=null,C=null,E=null,F=null;function G(){if(null===C)if(J()&&/Apple/.test(window.navigator.vendor)){var a=/AppleWeb
70Kit\/([0-9]+)(?:\.([0-9]+))(?:\.([0-9]+))/.exec(window.navigator.userAgent);C=!!a&&603>parseInt(a[1],10)}else C=!1;return C}function J(){null===F&&(F=!!document.fonts);return F} 71 function K(){if(null===E){var a=document.createElement("div");try{a.style.font="condensed 100px sans-serif"}catch(b){}E=""!==a.style.font}return E}function L(a,b){return[a.style,a.weight,K()?a.stretch:"","100px",b].join(" ")} 72 A.prototype.load=function(a,b){var c=this,k=a||"BESbswy",q=0,D=b||3E3,H=(new Date).getTime();return new Promise(function(a,b){if(J()&&!G()){var M=new Promise(function(a,b){function e(){(new Date).getTime()-H>=D?b():document.fonts.load(L(c,'"'+c.family+'"'),k).then(function(c){1<=c.length?a():setTimeout(e,25)},function(){b()})}e()}),N=new Promise(function(a,c){q=setTimeout(c,D)});Promise.race([N,M]).then(function(){clearTimeout(q);a(c)},function(){b(c)})}else m(function(){function u(){var b;if(b=-1!= 73 f&&-1!=g||-1!=f&&-1!=h||-1!=g&&-1!=h)(b=f!=g&&f!=h&&g!=h)||(null===B&&(b=/AppleWebKit\/([0-9]+)(?:\.([0-9]+))/.exec(window.navigator.userAgent),B=!!b&&(536>parseInt(b[1],10)||536===parseInt(b[1],10)&&11>=parseInt(b[2],10))),b=B&&(f==v&&g==v&&h==v||f==w&&g==w&&h==w||f==x&&g==x&&h==x)),b=!b;b&&(d.parentNode&&d.parentNode.removeChild(d),clearTimeout(q),a(c))}function I(){if((new Date).getTime()-H>=D)d.parentNode&&d.parentNode.removeChild(d),b(c);else{var a=document.hidden;if(!0===a||void 0===a)f=e.a.offsetWidth, 74 g=n.a.offsetWidth,h=p.a.offsetWidth,u();q=setTimeout(I,50)}}var e=new r(k),n=new r(k),p=new r(k),f=-1,g=-1,h=-1,v=-1,w=-1,x=-1,d=document.createElement("div");d.dir="ltr";t(e,L(c,"sans-serif"));t(n,L(c,"serif"));t(p,L(c,"monospace"));d.appendChild(e.a);d.appendChild(n.a);d.appendChild(p.a);document.body.appendChild(d);v=e.a.offsetWidth;w=n.a.offsetWidth;x=p.a.offsetWidth;I();z(e,function(a){f=a;u()});t(e,L(c,'"'+c.family+'",sans-serif'));z(n,function(a){g=a;u()});t(n,L(c,'"'+c.family+'",serif')); 75 z(p,function(a){h=a;u()});t(p,L(c,'"'+c.family+'",monospace'))})})};"object"===typeof module?module.exports=A:(window.FontFaceObserver=A,window.FontFaceObserver.prototype.load=A.prototype.load);}()); 76 77 // Load and observe Lateef 78 var Lateef = new FontFaceObserver('Lateef', {weight: 400}); 79 Promise.all([Lateef.load()]).then(function() { 80 document.documentElement.classList.remove('wf-loading'); 81 document.documentElement.classList.add('wf-lateef'); 82 83 // Optimization for Repeat Views 84 // Set a flag in localstorage so repeat views can skip processing FFO. 85 sessionStorage.fontsLoadedLateef = true; 86 }); 87 88 // Load and observe Open Sans 89 var os300 = new FontFaceObserver('Open Sans', {weight: 300}); 90 var os400 = new FontFaceObserver('Open Sans', {weight: 400}); 91 Promise.all([os300.load(), os400.load()]).then(function() { 92 document.documentElement.classList.remove('wf-loading'); 93 document.documentElement.classList.add('wf-opensans'); 94 95 // Optimization for Repeat Views 96 // Set a flag in localstorage so repeat views can skip processing FFO. 97 sessionStorage.fontsLoadedOpensans = true; 98 }); 99 100 // Load and observe NEWFONT 101 /* 102 var NEWFONT = new FontFaceObserver('NEWFONT', {weight: 400}); 103 Promise.all([NEWFONT.load()]).then(function() { 104 document.documentElement.classList.remove('wf-loading'); 105 document.documentElement.classList.add('wf-NEWFONT'); 106 107 // Optimization for Repeat Views 108 // Set a flag in localstorage so repeat views can skip processing FFO. 109 sessionStorage.fontsLoadedNEWFONT = true; 110 }); 111 */ 112 })(); 113 </script>
113 114 115
115<script src=https://slashdot.org/country.js></script>
115 116
116<script src="/themes/linuxjournal/js/ada.js"></script>
116 117
117<script src="/themes/linuxjournal/js/accessibility.js"></script>
117 118
118<script>window.addEventListener('load', function() { new Accessibility(); });</script>
118 119
119<script src="//a.fsdn.com/con/js/sftheme/cmp2.js"></script>
119 120 <link rel="stylesheet" href="//a.fsdn.com/con/css/sftheme/sandiego/cmp.css" type="text/css"> 121 <link rel="stylesheet" href="/themes/linuxjournal/css/ccpa.css" type="text/css"> 122
122<script>window.bizx.cmp.init({ geo: window });</script>
122 123
123<script> 124 function bm_trace() { 125 (function (w,d,t) { 126 _ml = w._ml || {}; 127 _ml.eid = '771'; 128 var s, cd, tag; s = d.getElementsByTagName(t)[0]; cd = new Date(); 129 tag = d.createElement(t); tag.async = 1; 130 tag.src = 'https://ml314.com/tag.aspx?' + cd.getDate() + cd.getMonth(); 131 s.parentNode.insertBefore(tag, s); 132 })(window,document,'script'); 133 } 134 bizx.cmp.ifConsent('', ['all', 'bombora'],bm_trace); 135 </script>
135 136 137 </head> 138 <body class="path-webform has-glyphicons"> 139 <a href="#main-content" class="visually-hidden focusable skip-link"> 140 Skip to main content 141 </a> 142 143 <div class="dialog-off-canvas-main-canvas" data-off-canvas-main-canvas> 144 <div id="wrap"> 145<div class="leader-wrapper" id="leader-wrapper"> 146</div> 147 148<div class="brand-wrapper" id="brand-wrapper"> 149 <div class="brand container"> 150 <div class="region region-brand"> 151 <a class="logo navbar-btn" href="/" title="Home" rel="home"> 152 <h1><img src="/themes/linuxjournal/images/ljlogo.png" alt="Linux Journal" /></h1> 153 </a> 154 <section id="block-topbannernearlogo" class="block block-block-content block-block-contenta8e75a3d-967c-416d-8944-4015d1f90a84 clearfix"> 155 156 157 158 159 </section> 160 161 162 </div> 163 164 </div> 165 166 <div class="header-wrapper"> 167 <header class="navbar navbar-default container" id="navbar" role="banner"> 168 <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#navbar-collapse"> 169 <span class="sr-only">Toggle navigation</span> 170 <span class="icon-bar"></span> 171 <span class="icon-bar"></span> 172 <span class="icon-bar"></span> 173 </button> 174 <div id="navbar-collapse" class="navbar-collapse collapse"> 175 <div class="region region-navigation-collapsible"> 176 <section id="block-linuxjournal-main-menu" class="block block-system block-system-menu-blockmain clearfix navbar__menu col-xs-12 col-sm-8"> 177 178 179 180 181 <ul class="menu menu--main nav navbar-nav"> 182 <li class="expanded dropdown first"> 183 <a href="/" class="dropdown-toggle" data-toggle="dropdown" data-drupal-link-system-path="<front>">Topics+ <span class="caret"></span></a> 184 <ul class="dropdown-menu"> 185 <li class="first"> 186 <a href="/tag/cloud">Cloud</a> 187 </li> 188 <li> 189 <a href="/tag/containers" data-drupal-link-system-path="taxonomy/term/978">Containers</a> 190 </li> 191 <li> 192 <a href="/tag/desktop">Desktop</a> 193 </li> 194 <li> 195 <a href="/tag/kernel" data-drupal-link-system-path="taxonomy/term/662">Kernel</a> 196 </li> 197 <li> 198 <a href="/tag/mobile">Mobile</a> 199 </li> 200 <li> 201 <a href="/tag/networking">Networking</a> 202 </li> 203 <li> 204 <a href="/tag/privacy">Privacy</a> 205 </li> 206 <li> 207 <a href="/tag/programming">Programming</a> 208 </li> 209 <li> 210 <a href="/tag/security" data-drupal-link-system-path="taxonomy/term/31">Security</a> 211 </li> 212 <li> 213 <a href="/tag/servers">Servers</a> 214 </li> 215 <li class="last"> 216 <a href="/tag/sysadmin" data-drupal-link-system-path="taxonomy/term/21">SysAdmin</a> 217 </li> 218 </ul> 219 220 </li> 221 <li> 222 <a href="/news" data-drupal-link-system-path="news">News</a> 223 </li> 224 <li class="last"> 225 <a href="/books" data-drupal-link-system-path="books">eBooks</a> 226 </li> 227 </ul> 228 229 230 </section> 231 232<section class="search-block-form block block-search block-search-form-block clearfix navbar__search col-xs-12 col-sm-4 col-md-4 col-md-offset-0" data-drupal-selector="search-block-form" id="block-linuxjournal-search" role="search"> 233 234 <h2 class="block-title sr-only">Search</h2> 235 236 237 <form action="/search/node" method="get" id="search-block-form" accept-charset="UTF-8"> 238 <div class="form-item js-form-item form-type-search js-form-type-search form-item-keys js-form-item-keys form-no-label form-group"> 239 <label for="edit-keys" class="control-label sr-only">Search</label> 240 241
242 <div class="input-group"><input title="Enter the terms you wish to search for." data-drupal-selector="edit-keys" class="form-search form-control" placeholder="Search" type="search" id="edit-keys" name="keys" value="" size="15" maxlength="128" /><span class="input-group-btn"><button type="submit" value="Search" class="button js-form-submit form-submit btn-primary btn icon-only" name=""><span class="sr-only">Search</span><span class="icon glyphicon glyphicon-search" aria-hidden="true"></span></button></span></div> 243 244 245 246 <div id="edit-keys--description" class="description help-block"> 247 Enter the terms you wish to search for. 248 </div> 249 </div> 250<div class="form-actions form-group js-form-wrapper form-wrapper" data-drupal-selector="edit-actions" id="edit-actions"></div> 251 252</form> 253 254 </section> 255 256 257 </div> 258 259 </div> 260 <div class="navbar-header"> 261 <div class="region region-navigation"> 262 <section id="block-mobilenavigation" class="block block-system block-system-menu-blockmenu-mobile-navbar clearfix col-xs-12 col-md-8 col-md-offset-2 col-lg-8 col-lg-offset-0 navbar__menu navbar__mobilenavigation"> 263 264 265 266 267 <ul class="menu menu--menu-mobile-navbar nav"> 268 <li class="first"> 269 <a href="/news" data-drupal-link-system-path="news">News</a> 270 </li> 271 <li> 272 <a href="/popular" data-drupal-link-system-path="popular">Popular</a> 273 </li> 274 <li class="last"> 275 <a href="/recent" data-drupal-link-system-path="recent">Recent</a> 276 </li> 277 </ul> 278 279 280 </section> 281 282 </div> 283 284 </div> 285 </header> 286 </div> 287 288</div> 289 <div role="main" class="main-container container js-quickedit-main-content" id="main"> 290 <div class="row"> 291 292 293 294 <section class="col-sm-12"> 295 296 <div class="highlighted"> <div class="region region-highlighted"> 297 <div data-drupal-messages-fallback class="hidden"></div> 298<section id="block-contentsectionad" class="block block-block-content block-block-content23002994-ad54-4b02-9817-f4cee4ea308a clearfix"> 299 300 301 302 303 <div class="field field--name-body field--type-text-with-summary field--label-hidden field--item"><div id="sitewide-top-banner-placeholder" style="height:100px;width:100%;padding-top:10px;">Â </div>
304<script data-source="linuxjournal" src="https://a.fsdn.com/con/js/sandiego/floating-unit.js?2026-03-23"></script>
304<style type="text/css"> 305<!--/*--><![CDATA[/* ><!--*/ 306.header-wrapper{ margin-bottom:0;} 307#sitewide-top-banner-placeholder{ 308margin-bottom: 25px; 309height:100px; 310width:100% 311} 312 313/*--><!]]>*/ 314</style></div> 315 316 </section> 317 318 319 </div> 320</div> 321 322 323 324 325 <a id="main-content"></a> 326 <div class="region region-content"> 327 <h1 class="page-header">Contact</h1> 328 329 <form class="webform-submission-form webform-submission-add-form webform-submission-contact-form webform-submission-contact-add-form js-webform-details-toggle webform-details-toggle" data-drupal-selector="webform-submission-contact-add-form" action="/form/contact" method="post" id="webform-submission-contact-add-form" accept-charset="UTF-8"> 330 331 <div class="form-item js-form-item form-type-textfield js-form-type-textfield form-item-name js-form-item-name form-group"> 332 <label for="edit-name" class="control-label js-form-required form-required">Your Name</label> 333 334
335 <input data-drupal-selector="edit-name" class="form-text required form-control" type="text" id="edit-name" name="name" value="" size="60" maxlength="255" required="required" aria-required="true" /> 336 337 338 339 </div> 340<div class="form-item js-form-item form-type-email js-form-type-email form-item-email js-form-item-email form-group"> 341 <label for="edit-email" class="control-label js-form-required form-required">Your Email</label> 342 343 344 <input data-drupal-selector="edit-email" class="form-email required form-control" type="email" id="edit-email" name="email" value="" size="60" maxlength="254" required="required" aria-required="true" /> 345 346 347 348 </div> 349<div class="form-item js-form-item form-type-textfield js-form-type-textfield form-item-subject js-form-item-subject form-group"> 350 <label for="edit-subject" class="control-label js-form-required form-required">Subject</label> 351 352 353 <input data-drupal-selector="edit-subject" class="form-text required form-control" type="text" id="edit-subject" name="subject" value="" size="60" maxlength="255" required="required" aria-required="true" /> 354 355 356 357 </div> 358<div class="form-item js-form-item form-type-textarea js-form-type-textarea form-item-message js-form-item-message form-group"> 359 <label for="edit-message" class="control-label js-form-required form-required">Message</label> 360 361 362 <div class="form-textarea-wrapper"> 363 <textarea data-drupal-selector="edit-message" class="form-textarea required form-control resize-vertical" id="edit-message" name="message" rows="5" cols="60" required="required" aria-required="true"></textarea> 364</div> 365 366 367 368 369 </div> 370<div class="form-item js-form-item form-type-checkbox js-form-type-checkbox form-item-i-understand-by-clicking-on-send-message-button-below-i-am-agree js-form-item-i-understand-by-clicking-on-send-message-button-below-i-am-agree checkbox"> 371 372 373 374 375 <label for="edit-i-understand-by-clicking-on-send-message-button-below-i-am-agree" class="control-label option js-form-required form-required"><input data-drupal-selector="edit-i-understand-by-clicking-on-send-message-button-below-i-am-agree" class="form-checkbox required" type="checkbox" id="edit-i-understand-by-clicking-on-send-message-button-below-i-am-agree" name="i_understand_by_clicking_on_send_message_button_below_i_am_agree" value="1" required="required" aria-required="true" />I understand by clicking on "Send Message" button below I am agreeing to the LinuxJournal <a href="https://slashdotmedia.com/terms-of-use/" target="_blank" rel="nofollow">Terms of Use</a> and the <a href="https://slashdotmedia.com/privacy-statement/" target="_blank" rel="nofollow">Privacy Policy</a> which describe how we use and share your data. I agree to receive communications from LinuxJournal</label> 376 377 378 </div> 379<div id="edit-markup" class="form-item js-form-item form-type-webform-markup js-form-type-webform-markup form-item-markup js-form-item-markup form-no-label form-group"> 380 381 382 <div class="g-recaptcha" data-sitekey="6Le9L8oZAAAAANFWpjOQPQgHo_XzekW8jss0Py49"></div> 383 384 385 386 </div> 387<div data-drupal-selector="edit-actions" class="form-actions webform-actions form-group js-form-wrapper form-wrapper" id="edit-actions"><button class="webform-button--submit button button--primary js-form-submit form-submit btn-primary btn" data-drupal-selector="edit-actions-submit" type="submit" id="edit-actions-submit" name="op" value="Send message">Send message</button> 388</div> 389<input autocomplete="off" data-drupal-selector="form-ez6v67dikwrha-sy6xnwd9xq-nhnauyubt9ktdtz1hc" type="hidden" name="form_build_id" value="form-Ez6v67dIkWrHA-sY6XNwd9xQ_NhnAUYUBt9KTDTZ1hc" /><input data-drupal-selector="edit-webform-submission-contact-add-form" type="hidden" name="form_id" value="webform_submission_contact_add_form" /><div class="url-textfield form-group js-form-wrapper form-wrapper" style="display: none !important;"><div class="form-item js-form-item form-type-textfield js-form-type-textfield form-item-url js-form-item-url form-group"> 390 <label for="edit-url" class="control-label">Leave this field blank</label> 391 392
393 <input autocomplete="off" data-drupal-selector="edit-url" class="form-text form-control" type="text" id="edit-url" name="url" value="" size="20" maxlength="128" /> 394 395 396 397 </div> 398</div> 399 400 401 402</form> 403 404 405 </div> 406 407 </section> 408 409 </div> 410 </div> 411 412 <footer class="footer container" role="contentinfo"> 413 <div class="region region-footer"> 414 <section class="views-element-container block block-views block-views-blocknewsletter-promo-block-block-1 clearfix" id="block-views-block-newsletter-promo-block-block-1"> 415 416 417 418 <div class="form-group"><div class="view view-newsletter-promo-block view-id-newsletter_promo_block view-display-id-block_1 js-view-dom-id-61b4a6c21ad0b6f6cb52193233c7a24d56d173795370a6179f5ffdc1e37ce251"> 419 420 421 422 <div class="view-content"> 423 <div class="views-row"> 424 <div class="field field--name-body field--type-text-with-summary field--label-hidden field--item"><div class="newsletter-bottom"> 425<div class="col-md-9 col-sm-12 signup-form"> 426<!--<h3>Linux Journal Week in Review</h3> 427<p>Sign up to get all the good stuff delivered to your inbox every week.</p> 428 429 430<form id="subForm" class="js-cm-form" action="https://www.createsend.com/t/subscribeerror?description=" method="post" data-id="A61C50BEC994754B1D79C5819EC1255CDBC34DDF3E170B13E2BAC2D68C42BF424F853383C84F5BAE38EAB4CFA5C73907CAC074FF8192503AF80F3699F7FE5CE1"> 431<div class="flexform">--> 432 <!--<label for="fieldEmail">Email</label> 433 <br />--> 434 <!--<input id="fieldEmail" name="cm-gjjtdh-gjjtdh" type="email" class="js-cm-email-input" placeholder="Enter your email. Get the newsletter." 435 required /> 436 437 <button class="js-cm-submit-button" type="submit">Sign Up</button> 438</div> 439<div> 440 <input id="cm-privacy-consent" name="cm-privacy-consent" required type="checkbox" 441 /> 442 <label for="cm-privacy-consent">I give my consent to be emailed</label> 443 <input id="cm-privacy-consent-hidden" 444 name="cm-privacy-consent-hidden" type="hidden" value="true" /> 445</div> 446 447</form>
448<script type="text/javascript" src="https://js.createsend1.com/javascript/copypastesubscribeformlogic.js"></script>
448 449</div>--> 450<!--<div class="col-md-3 col-sm-12 subs-callout"> 451<img src="/sites/default/files/styles/large/public/2019-01/LJ294-Jan2019-Cover_0.jpg" width="100px" /> 452 453<h3>The Value of Open Source Journalism</h3> 454<p> 455Subscribe and support our coverage for technology's biggest thinkers â with up to 52% savings. 456</p> 457<strong><a href="https://www.linuxjournal.com/subscribe">Subscribe <i class="fa fa-angle-double-right" aria-hidden="true"></i></a> 458</strong> 459 460 461 462</div>--> 463</div> 464 465</div> 466 </div> 467 468 </div> 469 470 </div> 471</div> 472 473 </section> 474 475 476 </div> 477 478 <div class="footer-blocks col-sm-12"> 479 <div class="col-md-6 col-sm-12 footer-left"> 480 <div class="region region-footer-left"> 481 <section id="block-connectwithusfooter" class="block block-block-content block-block-content5e722bd4-5e08-454b-8507-956089bfa661 clearfix"> 482 483 484 485 486 <div class="field field--name-body field--type-text-with-summary field--label-hidden field--item"><div class="footer-heading">Connect With Us <span class="social-media sm-a-no-underline"><a href="https://youtube.com/linuxjournalonline" alt="Linux Journal on YouTube" aria-label="YouTube"><i class="fa fa-youtube fa-2x"></i></a><a href="https://www.facebook.com/linuxjournal/" alt="Linux Journal on Facebook" aria-label="Facebook"><i class="fa fa-facebook-f fa-2x"></i><a href="https://twitter.com/linuxjournal" alt="Linux Journal on Twitter" aria-label="Twitter"><i class="fa fa-twitter fa-2x"></i></a></span></div> 487 488<p>Linux Journal, representing 25+ years of publication, is the original magazine of the global Open Source community.</p></div> 489 490 </section> 491 492<section id="block-linuxjournal-block-9" class="block block-block-content block-block-content8669793b-e217-4426-a79e-eb3c21ede127 clearfix"> 493 494 495 496 497 <div class="field field--name-body field--type-text-with-summary field--label-hidden field--item"><div id="copyright">© 2026 Slashdot Media, LLC. All rights reserved.</div> 498</div> 499 500 </section> 501 502<section id="block-privacyterms" class="block block-block-content block-block-contenta203b8bd-80ef-4982-bf6e-784dd7b44120 clearfix"> 503 504 505 506 507 <div class="field field--name-body field--type-text-with-summary field--label-hidden field--item"><ul class="menu menu--footer-submenu nav" id="terms-nav"> 508 <li><a href="https://slashdotmedia.com/privacy-statement/" rel="nofollow" target="_blank">PRIVACY POLICY</a></li> 509 <li><a href="https://slashdotmedia.com/terms-of-use/" rel="nofollow" target="_blank">TERMS OF SERVICE</a></li> 510 <li><a href="/sponsors">ADVERTISE</a></li> 511</ul></div> 512 513 </section> 514 515 516 </div> 517 518 </div> 519 520 <div class="col-md-4 col-sm-8 footer-middle"> 521 <div class="region region-footer-middle"> 522 <nav role="navigation" aria-labelledby="block-footermenucolumn2-menu" id="block-footermenucolumn2"> 523 524 <h2 class="visually-hidden" id="block-footermenucolumn2-menu">Footer Menu Column 2</h2> 525 526 527 528 <ul class="menu menu--footer-menu-column-2 nav"> 529 <li class="first"> 530 <a href="/content/masthead" data-drupal-link-system-path="node/1007727">Masthead</a> 531 </li> 532 <li> 533 <a href="/author" data-drupal-link-system-path="node/1009249">Authors</a> 534 </li> 535 <li class="active active-trail last"> 536 <a href="/form/contact" class="active-trail is-active" data-drupal-link-system-path="webform/contact">Contact Us</a> 537 </li> 538 </ul> 539 540 541 </nav> 542<nav role="navigation" aria-labelledby="block-footermenucolumn3-menu" id="block-footermenucolumn3"> 543 544 <h2 class="visually-hidden" id="block-footermenucolumn3-menu">Footer Menu Column 3</h2> 545 546 547 548 <ul class="menu menu--footer-menu-column-3 nav"> 549 <li class="first"> 550 <a href="/rss_feeds" data-drupal-link-system-path="node/1000457">RSS Feeds</a> 551 </li> 552 <li class="last"> 553 <a href="/aboutus" data-drupal-link-system-path="node/1000267">About Us</a> 554 </li> 555 </ul> 556 557 558 </nav> 559 560 </div> 561 562 </div> 563 564 </div> 565 </footer> 566 567</div> 568 </div> 569 570 571
571<script type="application/json" data-drupal-selector="drupal-settings-json">{"path":{"baseUrl":"\/","scriptPath":null,"pathPrefix":"","currentPath":"webform\/contact","currentPathIsAdmin":false,"isFront":false,"currentLanguage":"en"},"pluralDelimiter":"\u0003","suppressDeprecationErrors":true,"bootstrap":{"forms_has_error_value_toggle":1,"popover_enabled":1,"popover_animation":1,"popover_auto_close":1,"popover_container":"body","popover_content":"","popover_delay":"0","popover_html":0,"popover_placement":"right","popover_selector":"","popover_title":"","popover_trigger":"click"},"linuxjournal":{"googleAnalytics":{"account":"UA-1117794-1"},"disqus":{"origin":"https:\/\/www.linuxjournal.com","prettyUrl":"\/form\/contact","fullUrl":"https:\/\/www.linuxjournal.com\/form\/contact","embedUrl":"https:\/\/linuxjournal.disqus.com\/embed.js","shortname":"linuxjournal"}},"ajaxTrustedUrl":{"form_action_p_pvdeGsVG5zNF_XLGPTvYSKCf43t8qZYSwcfZl2uzM":true,"\/search\/node":true},"user":{"uid":0,"permissionsHash":"a7b3a803411eb9cbd5d7d374ffb326721ee8274ab5a665df8f38311e3aad858c"}}</script>
vendor: 1 bytes, line 571
571
572<script src="/core/assets/vendor/jquery/jquery.min.js?v=3.6.3"></script>
vendor: 1 bytes, line 572
572
573<script src="/core/assets/vendor/underscore/underscore-min.js?v=1.13.6"></script>
vendor: 1 bytes, line 573
573
574<script src="/core/misc/polyfills/element.matches.js?v=9.5.11"></script>
vendor: 1 bytes, line 574
574
575<script src="/core/misc/polyfills/object.assign.js?v=9.5.11"></script>
vendor: 1 bytes, line 575
575
576<script src="/core/assets/vendor/once/once.min.js?v=1.0.1"></script>
vendor: 1 bytes, line 576
576
577<script src="/core/assets/vendor/jquery-once/jquery.once.min.js?v=2.2.3"></script>
vendor: 1 bytes, line 577
577
578<script src="/core/misc/drupalSettingsLoader.js?v=9.5.11"></script>
vendor: 1 bytes, line 578
578
579<script src="/core/misc/drupal.js?v=9.5.11"></script>
vendor: 1 bytes, line 579
579
580<script src="/core/misc/drupal.init.js?v=9.5.11"></script>
vendor: 1 bytes, line 580
580
581<script src="/themes/contrib/bootstrap/js/drupal.bootstrap.js?tfpujm"></script>
vendor: 1 bytes, line 581
581
582<script src="/themes/contrib/bootstrap/js/attributes.js?tfpujm"></script>
vendor: 1 bytes, line 582
582
583<script src="/themes/contrib/bootstrap/js/theme.js?tfpujm"></script>
vendor: 1 bytes, line 583
583
584<script src="/themes/linuxjournal/bootstrap/assets/javascripts/bootstrap/affix.js?tfpujm"></script>
vendor: 1 bytes, line 584
584
585<script src="/themes/linuxjournal/bootstrap/assets/javascripts/bootstrap/alert.js?tfpujm"></script>
vendor: 1 bytes, line 585
585
586<script src="/themes/linuxjournal/bootstrap/assets/javascripts/bootstrap/button.js?tfpujm"></script>
vendor: 1 bytes, line 586
586
587<script src="/themes/linuxjournal/bootstrap/assets/javascripts/bootstrap/carousel.js?tfpujm"></script>
vendor: 1 bytes, line 587
587
588<script src="/themes/linuxjournal/bootstrap/assets/javascripts/bootstrap/collapse.js?tfpujm"></script>
vendor: 1 bytes, line 588
588
589<script src="/themes/linuxjournal/bootstrap/assets/javascripts/bootstrap/dropdown.js?tfpujm"></script>
vendor: 1 bytes, line 589
589
590<script src="/themes/linuxjournal/bootstrap/assets/javascripts/bootstrap/modal.js?tfpujm"></script>
vendor: 1 bytes, line 590
590
591<script src="/themes/linuxjournal/bootstrap/assets/javascripts/bootstrap/tooltip.js?tfpujm"></script>
vendor: 1 bytes, line 591
591
592<script src="/themes/linuxjournal/bootstrap/assets/javascripts/bootstrap/popover.js?tfpujm"></script>
vendor: 1 bytes, line 592
592
593<script src="/themes/linuxjournal/bootstrap/assets/javascripts/bootstrap/scrollspy.js?tfpujm"></script>
vendor: 1 bytes, line 593
593
594<script src="/themes/linuxjournal/bootstrap/assets/javascripts/bootstrap/tab.js?tfpujm"></script>
vendor: 1 bytes, line 594
594
595<script src="/themes/linuxjournal/bootstrap/assets/javascripts/bootstrap/transition.js?tfpujm"></script>
vendor: 1 bytes, line 595
595
596<script src="/themes/linuxjournal/js/lj-consentmanager.js?tfpujm"></script>
vendor: 1 bytes, line 596
596
597<script src="/core/misc/jquery.once.bc.js?v=9.5.11"></script>
vendor: 1 bytes, line 597
597
598<script src="/modules/contrib/webform/js/webform.element.details.save.js?v=9.5.11"></script>
vendor: 1 bytes, line 598
598
599<script src="/modules/contrib/webform/js/webform.element.message.js?v=9.5.11"></script>
vendor: 1 bytes, line 599
599
600<script src="/webform/javascript/contact?tfpujm"></script>
vendor: 1 bytes, line 600
600
601<script src="/modules/contrib/webform/js/webform.behaviors.js?v=9.5.11"></script>
vendor: 1 bytes, line 601
601
602<script src="/core/misc/states.js?v=9.5.11"></script>
vendor: 1 bytes, line 602
602
603<script src="/themes/contrib/bootstrap/js/misc/states.js?tfpujm"></script>
vendor: 1 bytes, line 603
603
604<script src="/modules/contrib/webform/js/webform.states.js?v=9.5.11"></script>
vendor: 1 bytes, line 604
604
605<script src="/modules/contrib/webform/modules/webform_bootstrap/js/webform_bootstrap.states.js?v=9.5.11"></script>
vendor: 1 bytes, line 605
605
606<script src="/themes/contrib/bootstrap/js/popover.js?tfpujm"></script>
vendor: 1 bytes, line 606
606
607<script src="/core/misc/debounce.js?v=9.5.11"></script>
vendor: 1 bytes, line 607
607
608<script src="/core/misc/form.js?v=9.5.11"></script>
vendor: 1 bytes, line 608
608
609<script src="/themes/contrib/bootstrap/js/misc/form.js?tfpujm"></script>
vendor: 1 bytes, line 609
609
610<script src="/modules/contrib/webform/js/webform.form.js?v=9.5.11"></script>
vendor: 1 bytes, line 610
610
611<script src="/core/misc/announce.js?v=9.5.11"></script>
vendor: 1 bytes, line 611
611
612<script src="/modules/contrib/webform/js/webform.element.details.toggle.js?v=9.5.11"></script>
612 613 614 <!-- START EMBED --> 615 <noscript><img src="https://api.b2c.com/api/noscript-448i7exgpyqpr9c144q.gif"></noscript> 616<!-- END EMBED --> 617<!-- Matomo -->
618<script type="text/javascript"> 619var _paq = _paq || []; 620function initPiwik() { 621 _paq.push(['trackPageView']); 622 _paq.push(['enableLinkTracking']); 623 (function() { 624 var u="https://analytics.linuxjournal.com/"; 625 _paq.push(['setTrackerUrl', u+'piwik.php']); 626 _paq.push(['setSiteId', '50']); 627 var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; 628 g.type='text/javascript'; g.async=true; g.defer=true; g.src=u+'piwik.js'; s.parentNode.insertBefore(g,s); 629 })(); 630} 631</script>
631 632<noscript><p><img src="https://analytics.linuxjournal.com/piwik.php?idsite=50&rec=1" style="border:0;" alt="" /></p></noscript> 633<!-- End Matomo Code --> 634<div class="modal-custom overlay-custom" id="ccpa-modal" style="margin-left: 0; display: none; max-width: 100%; width: 100%"> 635 <div id="modal-content" class="modal-content"> 636 <div class="modal-header" id="ccpa-modal-content-destination"></div> 637 <span class="close" id="modal-close">×</span> 638 </div> 639</div> 640 </body> 641</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.