summaryrefslogtreecommitdiff
path: root/blog/post/2018-06-05.html
diff options
context:
space:
mode:
Diffstat (limited to 'blog/post/2018-06-05.html')
-rw-r--r--blog/post/2018-06-05.html216
1 files changed, 216 insertions, 0 deletions
diff --git a/blog/post/2018-06-05.html b/blog/post/2018-06-05.html
new file mode 100644
index 0000000..a68f33e
--- /dev/null
+++ b/blog/post/2018-06-05.html
@@ -0,0 +1,216 @@
+<html><head>
+<meta charset="utf-8">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="theme-color" content="#000000">
+<title>Chrisoft::Blog</title>
+<script type="text/javascript" src="/panel.js"></script>
+<script type="text/javascript" src="/blog/footnoter.js"></script>
+<script type="text/javascript" src="/blog/aes-js.js"></script>
+<script type="text/javascript" src="/blog/scrypt.js"></script>
+<script type="text/javascript" src="/blog/sha256.js"></script>
+<script type="text/javascript" src="/blog/decryptor.js"></script>
+<link rel="stylesheet" type="text/css" href="/common.css">
+<link rel="stylesheet" type="text/css" href="/panel.css">
+<link rel="stylesheet" type="text/css" href="/theme0a.css" id="theme0a">
+<link rel="stylesheet" type="text/css" href="/theme0b.css" id="theme0b">
+<link rel="stylesheet" type="text/css" href="/theme1a.css" id="theme1a">
+<link rel="stylesheet" type="text/css" href="/theme1b.css" id="theme1b">
+<link rel="stylesheet" type="text/css" href="/theme2a.css" id="theme2a">
+<link rel="stylesheet" type="text/css" href="/theme2b.css" id="theme2b">
+<link rel="stylesheet" type="text/css" href="/theme3a.css" id="theme3a">
+<link rel="stylesheet" type="text/css" href="/theme3b.css" id="theme3b">
+<link rel="stylesheet" type="text/css" href="/blog/blogext.css">
+<script>
+function ol()
+{
+ window.onresize=function()
+ {
+ if(window.innerWidth<768)
+ setupevents();
+ else unsetevents();
+ }
+ window.onresize();
+ _decryptonload();
+}
+function loadTheme(){
+ var thm=document.cookie.replace(new RegExp("(?:(?:^|.*;\\s*)thm\\s*\\=\\s*([^;]*).*$)|^.*$"),"$1");
+ if(thm.length<2||'0123z'.indexOf(thm[0])==-1||'abz'.indexOf(thm[1])==-1)thm='zz';
+ var ent="";
+ var d=new Date();
+ if(thm[0]=='z')
+ {
+ var m=d.getMonth()+1;
+ if(m>=3&&m<6)thm='0'+thm[1];
+ else if(m>=6&&m<9)thm='1'+thm[1];
+ else if(m>=9&&m<12)thm='2'+thm[1];
+ else thm='3'+thm[1];
+ }
+ if(thm[1]=='z')
+ {if(d.getHours()>=18||d.getHours()<6)thm=thm[0]+'b';else thm=thm[0]+'a';}
+ ent=`theme${thm}`;
+ var R=new RegExp('theme[0-4][ab]');
+ for(var i=0;i<document.styleSheets.length;++i)
+ {
+ if(R.exec(document.styleSheets[i].ownerNode.id)!==null&&document.styleSheets[i].ownerNode.id!=ent)
+ document.styleSheets[i].disabled=true;
+ else document.styleSheets[i].disabled=false;
+ }
+ var thmcolor="";
+ switch(thm[0])
+ {
+ case '0':thmcolor=thm[1]=='a'?'#f59dda':'#2f0933';break;
+ case '1':thmcolor=thm[1]=='a'?'#9df59d':'#090933';break;
+ case '2':thmcolor=thm[1]=='a'?'#edb47b':'#1f1205';break;
+ case '3':thmcolor=thm[1]=='a'?'#a0cdfa':'#051933';break;
+ }
+ document.querySelector("meta[name=theme-color]").setAttribute('content',thmcolor);
+}
+loadTheme();
+</script>
+</head>
+<body onload="ol()" style="overflow-x:hidden;">
+ <div id="panel" class="TText">
+ <ul id="panellist">
+ <li><a href="/"><h1>Chrisoft</h1></a></li>
+ <li><a href="/blog"><h2>Blog</h2></a></li>
+ <li><a href="#"><h3 id="title">Software Project Management in the Free Software World</h3></a></li>
+ <li><span>Tags</span>
+ <ul id="tagslist">
+ <li><a href="/blog/list/sophistry/">sophistry</a></li></ul>
+ </li>
+ <li id="tocouter">
+ <span>Table of Contents</span>
+ <ul id="tocroot">
+ <li><a class="toctarg" href="#tocanch0">Project charter. What?</a></li><li><a class="toctarg" href="#tocanch1">Tools and outdated approaches</a></li><li><a class="toctarg" href="#tocanch2">Free software that is...</a></li></ul>
+ </li>
+ <li style="margin-left:-0.5em"><a id="prevp" href="2018-05-18.html">Prev post</a></li>
+ <li style="margin-left:-0.5em"><a id="nextp" href="2018-06-07.html">Next post</a></li>
+ </ul>
+ </div>
+ <div id="content">
+ <h2 id="titleh" class="TText" style="font-wight:normal;">Software Project Management in the Free Software World</h2>
+ <div id="datetags" class="TText" style="margin-bottom:1em;">2018-06-05<br>#sophistry</div>
+ <hr><div id="article" class="TText"><article>
+<p>
+This article is based on a presentation project I did for the software
+project management course. The original presentation can be found
+<a href="//filestorage.chrisoft.org/blog/data/ventriloquist.pdf">here</a><a id="n1" href="#note1" class="note">[1]</a>.
+</p>
+<p>
+As mentioned in <a href="https://chrisoft.org/blog/post/2018-05-18.html#tocanch4">
+another article</a>, software engineering college
+in China (one of which I am currently studying in) mainly deals with
+the development cycle of proprietary programs with a very specific purpose
+(i.e. enterprise software), such as software system for a library or an
+electric grid. Unfortunately, there are very few instances of free
+enterprise software in the wild. Therefore it's safe to assume that I still
+know nothing about the life cycle of a free software project except my own
+experience.
+</p>
+<h2 id="tocanch0" class="tvis">Project charter. What?</h2>
+<p>
+Approximately 50% of the class is focused on the project charter. How the
+charter is issued. Why modifying the charter is vital when the client requests
+to make a change in the requirements. This list can go a lot longer.
+</p>
+<p>
+However, project charter doesn't seem to play an important role in free software
+projects, at least compared to what I have learned. Even some <i>huge</i> free
+software projects such as KDE omits the project charter. Instead they have brief
+description of every sub-projects and use their 'philosophy' to govern the whole
+project.
+</p>
+<p>
+This can lead to problems though. When decisions need to be made, the only ones
+involved are the current maintainers. Free software projects fall into roughly
+four categories according to the way new features are introduced:
+</p>
+<ul>
+<li>Linux kernel/LineageOS: developers submits changes, got reviewed, and
+possibly merged.
+<p>Linux kernel is such a huge and complex project that probably only users
+extremely familiar with it know what new functionality they need. Also
+the code needs to have a reasonable wide range of use cases to be merged.
+This sets a pretty high standard for the contributors. LineageOS, on the
+other hand, is a lot easier to get started. However being mostly a community
+project, they cannot simply get every requested features implemented without
+help.</p>
+</li>
+<li>i3wm: this will never turn into compiz.
+<p>It is important for i3wm not to turn into compiz. However sometimes this
+can be abused for dictatorship over the project (e.g. gogs, which resulted
+in a fork into gitea.<a id="n2" href="#note2" class="note">[2]</a>)</p>
+</li>
+<li>systemd: let's add a email client to this.
+<p><s>j/k.</s></p>
+</li>
+<li><a href="#tocanch2">...</a></li>
+</ul>
+<h2 id="tocanch1" class="tvis">Tools and outdated approaches</h2>
+<p>
+Over the years, the process of building a commercial software has evolved a
+lot. However, the process of building free software seem to be stuck at what
+it was like in the 70s forever: (nearly) everything is still on mailing lists.
+Indeed, VCS, issue tracker and CI simplified a lot of stuff. And the
+infrastructure has also improved a lot from that of the 70s. But we are still
+no where close to a well-organized process. Personnel management is almost
+completely relying on faith. Deadlines can be pushed back again and again.
+That's it.
+</p>
+<h2 id="tocanch2" class="tvis">Free software that is...</h2>
+<p>... developed as if it was proprietary software.</p>
+<p>
+A very typical instance: Android. Repositories are not updated until new
+release comes out. Many related patents are held by Google. Even codename
+needs revealing.
+</p>
+<p>
+Another (less-known) example is Deepin, which one of my friends works for.
+It's infra is far less open to public than that of Debian or even Ubuntu.
+Public opinions are ignored from time to time.
+</p>
+<p>
+While making the project much more better-organized, this approach
+automatically makes the project dictated by the project management team.
+Many benefits of free software doesn't apply to such projects, which
+makes them closer to those 'shared source' software. Although still can be
+forked freely, most forks die out pretty quickly, as these projects tend
+to be pretty large in scale, maintenance of such a project is no trivial task.
+</p>
+<p>
+This is certainly not the best way to do it.
+</p>
+</article>
+<!--
+vim: syntax=html spell spelllang=en_us
+-->
+</div><br><hr>
+ <div class="TText" id="notediv" style="font-size:80%;"><span class="TText"><a id="note1" href="#n1">[1]</a>: I used the term
+"open source" in the original
+presentation, which is more familiar to the audience. But the actual focus
+is the free software world.<br></span><span class="TText"><a id="note2" href="#n2">[2]</a>: The maintainer of gogs is <br></span></div>
+ <div id="insanch" style="height:3em;"></div>
+ <div id="footer" style="">
+ <div id="pagesw" class="TText" style="width:100%;height:0.5em;"></div>
+ <div style="text-align:center;" class="TText">
+ Proudly powered by SSBS <reduced style="font-size:70%;">(the static stupid blogging system)</reduced> 2.5
+ <br>
+ Content licensed under CC BY-SA 4.0. <span id="purgep" style="display:none;font-size:70%;">This page has passphrase(s) stored. Click <a href="javascript:_purgep()">here</a> to purge.</span>
+ </div>
+ </div>
+ <div id="cmdbuf" class="TText" style="transition:500ms;padding:1em;font-size:2em;color:white;position:absolute;background-color:rgba(0,0,0,0.6);left:50%;top:50%;transform:translate(-50%,-50%);pointer-events:none;opacity:0;">
+ </div>
+ </div>
+ <div id="decryptui" style="display:none;opacity:0;color:white;z-index:1000;position:fixed;left:0;top:0;width:100%;height:100%;background-color:rgba(0,0,0,0.4);transition:opacity 0.5s;">
+ <div id="decryptdlg" class="TText" style="padding:10px 20px;position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);background-color:rgba(0,0,0,0.6);">
+ <div id="keyhint" style="margin-bottom:8px;"></div>
+ <div style="margin-bottom:8px;">Key: <input id="keyinp" type="text" style="color:#fff;"></div>
+ <div style="height:2.25em;">
+ <button id="btndecrypt" onclick="decryptor(decid,document.getElementById('keyinp').value);" style="position:absolute;left:20px;">Decrypt</button>
+ <button onclick="hidedecryptui();" style="position:absolute;right:20px;">Cancel</button>
+ </div>
+
+ </div>
+
+
+</div></body></html> \ No newline at end of file