Mercurial > docs > master
comparison discussion.roff @ 109:2b094b8fb422
Rework of existing text.
author | markus schnalke <meillo@marmaro.de> |
---|---|
date | Sun, 24 Jun 2012 21:42:23 +0200 |
parents | dd5620bf8659 |
children | 4c0f13b1e0e8 |
comparison
equal
deleted
inserted
replaced
108:dd5620bf8659 | 109:2b094b8fb422 |
---|---|
680 .P | 680 .P |
681 The two configure options | 681 The two configure options |
682 .CW --with-editor=EDITOR | 682 .CW --with-editor=EDITOR |
683 .CW --with-pager=PAGER | 683 .CW --with-pager=PAGER |
684 were used to specify the default editor and pager at configure time. | 684 were used to specify the default editor and pager at configure time. |
685 Doing so at configure time made sense in the Eighties, | 685 Doing so at configure time made sense in the eighties, |
686 when the set of available editors and pagers varied much across | 686 when the set of available editors and pagers varied much across |
687 different systems. | 687 different systems. |
688 Today, the situation is more homogeneous. | 688 Today, the situation is more homogeneous. |
689 The programs | 689 The programs |
690 .Pn vi | 690 .Pn vi |
1064 .U3 "Draft Folder Facility | 1064 .U3 "Draft Folder Facility |
1065 .P | 1065 .P |
1066 A change early in the project was the complete transition from | 1066 A change early in the project was the complete transition from |
1067 the single draft message to the draft folder facility. | 1067 the single draft message to the draft folder facility. |
1068 .Ci 337338b404931f06f0db2119c9e145e8ca5a9860 | 1068 .Ci 337338b404931f06f0db2119c9e145e8ca5a9860 |
1069 The draft folder facility was introduced in the mid-Eighties, when | 1069 The draft folder facility was introduced in the mid-eighties, when |
1070 Rose and Romine called it a ``relatively new feature''. | 1070 Rose and Romine called it a ``relatively new feature''. |
1071 .[ | 1071 .[ |
1072 rose romine real work | 1072 rose romine real work |
1073 .] | 1073 .] |
1074 Since then, the facility had existed but was deactivated by default. | 1074 Since then, the facility had existed but was deactivated by default. |
1582 ``\-[no]reverse under #ifdef BERK (I really HATE this)'' | 1582 ``\-[no]reverse under #ifdef BERK (I really HATE this)'' |
1583 by Rose and | 1583 by Rose and |
1584 ``Lists messages in reverse order with the `\-reverse' switch. | 1584 ``Lists messages in reverse order with the `\-reverse' switch. |
1585 This should be considered a bug.'' by Romine in the documentation. | 1585 This should be considered a bug.'' by Romine in the documentation. |
1586 The question remains why neither Rose and Romine had fixed this | 1586 The question remains why neither Rose and Romine had fixed this |
1587 bug in the Eighties when they wrote these comments nor has anyone | 1587 bug in the eighties when they wrote these comments nor has anyone |
1588 thereafter. | 1588 thereafter. |
1589 | 1589 |
1590 | 1590 |
1591 .ig | 1591 .ig |
1592 | 1592 |
1636 | 1636 |
1637 | 1637 |
1638 | 1638 |
1639 .H1 "Modernizing | 1639 .H1 "Modernizing |
1640 .P | 1640 .P |
1641 The code base of mmh originates from the late Seventies. | 1641 The code base of mmh originates from the late seventies. |
1642 Through the Eighties, extensive work had been done on it. | 1642 Through the eighties, extensive work had been done on it. |
1643 In the Nineties, it had been partly reorganized and extended. | 1643 In the nineties, it was partly reorganized and extended. |
1644 Relicts from each decade have gathered in the code base. | 1644 Relicts from each decade have gathered in the code base. |
1645 My goal was to modernize the code base. | 1645 My goal was to modernize the code base. |
1646 | 1646 |
1647 .P | 1647 .P |
1648 FIXME functional aspect only here | 1648 FIXME functional aspect only here |
1650 FIXME ref to `code style' for non-functional aspects. | 1650 FIXME ref to `code style' for non-functional aspects. |
1651 | 1651 |
1652 | 1652 |
1653 .H2 "Code Relicts | 1653 .H2 "Code Relicts |
1654 .P | 1654 .P |
1655 My position to drop obsolete functionality of mmh to remove old code | 1655 My position to drop obsolete functions of mmh, in order to remove old code, |
1656 is much more revolutional than the nmh community likes to have it. | 1656 is much more revolutional than the nmh community likes to have it. |
1657 Working on an experimental version, I was able to quickly drop | 1657 Working on an experimental version, I was able to quickly drop |
1658 functionality I considered ancient. | 1658 functionality I considered ancient. |
1659 The need for consensus with peers would have slowed this process down. | 1659 The need for consensus with peers would have slowed this process down. |
1660 Without the need to justify my decisions, I was able to rush forward. | 1660 Without the need to justify my decisions, I was able to rush forward. |
1680 I simply dropped the cruft. | 1680 I simply dropped the cruft. |
1681 .P | 1681 .P |
1682 The decision to drop a feature was based on literature research and | 1682 The decision to drop a feature was based on literature research and |
1683 careful thinking, but whether having had contact to this particular | 1683 careful thinking, but whether having had contact to this particular |
1684 feature within my own computer life served as a rule of thumb. | 1684 feature within my own computer life served as a rule of thumb. |
1685 My reasons are always made clean in the commit message for the | 1685 Always, I explained my reasons in the commit messages |
1686 version control system. | 1686 in the version control system. |
1687 Hence, others can comprehend my view and argue for undoing the change | 1687 Hence, others can comprehend my view and argue for undoing the change |
1688 if I have missed an important aspect. | 1688 if I have missed an important aspect. |
1689 I was quick in dropping parts. | |
1690 I rather re-included falsely dropped parts than going a slower pace. | |
1691 Mmh is experimental work; it required tough decisions. | |
1689 | 1692 |
1690 | 1693 |
1691 .U3 "Forking | 1694 .U3 "Forking |
1692 .P | 1695 .P |
1693 In being a tool chest, MH creates many processes. | 1696 Being a tool chest, MH creates many processes. |
1694 In earlier times | 1697 In earlier times |
1695 .Fu fork() | 1698 .Fu fork() |
1696 had been an expensive system call, because the process's image needed | 1699 had been an expensive system call, because the process's image needed |
1697 to be duplicated completely at once. | 1700 to be duplicated completely at once. |
1698 This was especially painfull in the common case when the image gets | 1701 This was especially painful in the common case when the image gets |
1699 replaced by a call to | 1702 replaced by a call to |
1700 .Fu exec() | 1703 .Fu exec() |
1701 right after having forked the child process. | 1704 right after having forked the child process. |
1702 The | 1705 The |
1703 .Fu vfork() | 1706 .Fu vfork() |
1729 .] | 1732 .] |
1730 I replaced all calls to | 1733 I replaced all calls to |
1731 .Fu vfork() | 1734 .Fu vfork() |
1732 with calls to | 1735 with calls to |
1733 .Fu fork() . | 1736 .Fu fork() . |
1737 .Ci 40821f5c1316e9205a08375e7075909cc9968e7d | |
1734 .P | 1738 .P |
1735 Related to the costs of | 1739 Related to the costs of |
1736 .Fu fork() | 1740 .Fu fork() |
1737 is the probability of its success. | 1741 is the probability of its success. |
1738 In the Eighties on heavy loaded systems, calls to | 1742 In the eighties, on heavy loaded systems, calls to |
1739 .Fu fork() | 1743 .Fu fork() |
1740 were prone to failure. | 1744 were prone to failure. |
1741 Hence, many of the | 1745 Hence, many of the |
1742 .Fu fork() | 1746 .Fu fork() |
1743 calls in the code were wrapped into loops to retry the | 1747 calls in the code were wrapped into loops to retry the |
1744 .Fu fork() | 1748 .Fu fork() |
1745 several times, for higher changes to succeed, eventually. | 1749 several times, to increase the changes to succeed, eventually. |
1746 On modern systems, failing calls to | 1750 On modern systems, a failing |
1747 .Fu fork() | 1751 .Fu fork() |
1748 are unusual. | 1752 call is unusual. |
1749 Hence, in the rare case when | 1753 Hence, in the rare case when |
1750 .Fu fork() | 1754 .Fu fork() |
1751 fails, mmh programs simply abort. | 1755 fails, mmh programs simply abort. |
1752 | 1756 .Ci 5fbf37ee68e018998ada61eeab73e035b26834b6 |
1753 | 1757 |
1754 .U3 "Obsolete Header Fields | 1758 |
1759 .U3 "Header Fields | |
1755 .BU | 1760 .BU |
1756 The | 1761 The |
1757 .Hd Encrypted | 1762 .Hd Encrypted |
1758 header field was introduced by RFC\|822, | 1763 header field was introduced by RFC\|822, |
1759 but already marked legacy in RFC\|2822. | 1764 but already marked as legacy in RFC\|2822. |
1760 OpenPGP provides the basis for standardized exchange of encrypted | 1765 Today, OpenPGP provides the basis for standardized exchange of encrypted |
1761 messages [RFC\|4880, RFC\|3156]. | 1766 messages [RFC\|4880, RFC\|3156]. |
1762 The support for | 1767 Hence, the support for |
1763 .Hd Encrypted | 1768 .Hd Encrypted |
1764 header fields is removed in mmh. | 1769 header fields is removed in mmh. |
1770 .Ci 064527f7b57ab050e5af13e15ad99aeeab125857 | |
1765 .BU | 1771 .BU |
1766 Native support for | 1772 Native support for |
1767 .Hd Face | 1773 .Hd Face |
1768 header fields has been removed, as well. | 1774 header fields has been removed, as well. |
1775 .Ci 8e5be81f784682822f5e868c1bf3c8624682bd23 | |
1769 This feature is similar to the | 1776 This feature is similar to the |
1770 .Hd X-Face | 1777 .Hd X-Face |
1771 header field in its intent, | 1778 header field in its intent, |
1772 but takes a different approach to store the image. | 1779 but takes a different approach to store the image. |
1773 Instead of encoding the image data directly into the header field, | 1780 Instead of encoding the image data directly into the header field, |
1774 the it contains the hostname and UDP port where the image | 1781 it contains the hostname and UDP port where the image |
1775 date could be retrieved. | 1782 date can be retrieved. |
1776 There is even a third system, invented in 2005. | 1783 There exists even a third Face system, |
1777 Although it re-uses the | 1784 which is the successor of |
1785 .Hd X-Face , | |
1786 although it re-uses the | |
1778 .Hd Face | 1787 .Hd Face |
1779 header field, it is the successor of | 1788 header field. |
1780 .Hd X-Face | 1789 It was invented in 2005 and supports colored PNG images. |
1781 with support for colored PNG images. | |
1782 None of the Face systems described here is popular today. | 1790 None of the Face systems described here is popular today. |
1783 Hence, mmh has no direct support for them. | 1791 Hence, mmh has no direct support for them. |
1784 .BU | 1792 .BU |
1785 The | 1793 The |
1786 .Hd Content-MD5 | 1794 .Hd Content-MD5 |
1790 [RFC\|1864]. | 1798 [RFC\|1864]. |
1791 The proper approach to verify content integrity in an | 1799 The proper approach to verify content integrity in an |
1792 end-to-end relationship is the use of digital cryptography. | 1800 end-to-end relationship is the use of digital cryptography. |
1793 .\" XXX (RFCs FIXME). | 1801 .\" XXX (RFCs FIXME). |
1794 On the other hand, transfer protocols should detect corruption during | 1802 On the other hand, transfer protocols should detect corruption during |
1795 each transmission. The TCP includes a checksum field therefore. | 1803 the transmission. |
1804 The TCP includes a checksum field therefore. | |
1796 These two approaches in combinations render the | 1805 These two approaches in combinations render the |
1797 .Hd Content-MD5 | 1806 .Hd Content-MD5 |
1798 header field superfluous. | 1807 header field superfluous. |
1799 The nmh-workers mailing list archive contains about 4\|200 messages, | 1808 Not a single one out of 4\|200 messages from two decades |
1800 ranging from 1992 until today. | 1809 in an nmh-workers mailing list archive contains a |
1801 Not a single one had a | |
1802 .Hd Content-MD5 | 1810 .Hd Content-MD5 |
1803 header field. | 1811 header field. |
1804 Neither did any of the 60\|000 messages in my personal mail storage. | 1812 Neither did any of the 60\|000 messages in my personal mail storage. |
1805 Removing the support for this header field, | 1813 Removing the support for this header field, |
1806 removed the last place where MD5 computation was needed. | 1814 removed the last place where MD5 computation was needed. |
1815 .Ci 31dc797eb5178970d68962ca8939da3fd9a8efda | |
1807 Hence, the MD5 code could be removed as well. | 1816 Hence, the MD5 code could be removed as well. |
1808 Over 500 lines of code vanished by this one change. | 1817 Over 500 lines of code vanished by this one change. |
1809 | 1818 |
1810 | 1819 |
1811 .U3 "MMDF maildrop support | 1820 .U3 "MMDF maildrop support |
1812 .P | 1821 .P |
1813 This type of format is conceptionally similar to the mbox format, | 1822 This type of format is conceptionally similar to the mbox format, |
1814 but uses a different message delimiter (`\fL^A^A^A^A\fP' instead of | 1823 but uses a different message delimiter (`\fL^A^A^A^A\fP' instead of |
1815 `\fLFrom\0\fP'). | 1824 `\fLFrom\0\fP'). |
1816 Mbox is the de-facto standard maildrop format on Unix, | 1825 Mbox is the de-facto standard maildrop format on Unix, |
1817 whereas the MMDF maildrop format is hardly still known today. | 1826 whereas the MMDF maildrop format became forgotten. |
1818 I did drop MMDF maildrop format support. | 1827 I did drop MMDF maildrop format support. |
1819 .P | 1828 Mbox is the only packed mailbox format supported in mmh. |
1820 The simplifications within the code were only moderate. | 1829 .P |
1821 Switches could be removed from | 1830 The simplifications within the code were moderate. |
1822 .L packf | 1831 Mainly, the reading and writing of MMDF mailbox files was removed. |
1823 and | 1832 But also, switches of |
1824 .L rcvpack , | 1833 .Pn packf |
1825 which generate packed mailboxes. | 1834 and |
1826 Only one packed mailbox format remained: mbox. | 1835 .Pn rcvpack |
1827 The more important changes affected the equally named mail parsing | 1836 could be removed. |
1828 routine in | 1837 .Ci 3916ab66ad5d183705ac12357621ea8661afd3c0 |
1829 .Fn sbr/m_getfld.c . | 1838 In the message parsing function |
1830 The MMDF code had been removed there, but as now only one packed mailbox | 1839 .Fn sbr/m_getfld.c , |
1831 format is left, further code structure simplifications may be possible. | 1840 knowledge of MMDF packed mail boxes was removed. |
1841 .Ci 684ec30d81e1223a282764452f4902ed4ad1c754 | |
1842 Further code structure simplifications may be possible there, | |
1843 because only one single packed mailbox format is left to be supported. | |
1832 I have not worked on them yet because | 1844 I have not worked on them yet because |
1833 .Fu m_getfld() | 1845 .Fu m_getfld() |
1834 is heavily optimized and thus dangerous to touch. | 1846 is heavily optimized and thus dangerous to touch. |
1835 The risk of damaging the intricate workings of the optimized code is | 1847 The risk of damaging the intricate workings of the optimized code is |
1836 too high. | 1848 too high. |
1837 .\" XXX: move somewhere else | 1849 .\" XXX: move somewhere else |
1838 This problem is know to the developers of nmh, too. | 1850 This problem is know to the developers of nmh, too. |
1839 They also avoid touching this minefield if possible. | 1851 They also avoid touching this minefield. |
1840 | 1852 |
1841 | 1853 |
1842 .U3 "Prompter's Control Keys | 1854 .U3 "Prompter's Control Keys |
1843 .P | 1855 .P |
1844 The program | 1856 The program |
1867 .Pn stty . | 1879 .Pn stty . |
1868 The switches are removed now | 1880 The switches are removed now |
1869 .Ci 0bd9750710cdbab80cfb4036dd87af20afe1552f . | 1881 .Ci 0bd9750710cdbab80cfb4036dd87af20afe1552f . |
1870 | 1882 |
1871 | 1883 |
1872 .U3 "Hardcopy terminal support | 1884 .U3 "Hardcopy Terminal Support |
1873 .P | 1885 .P |
1874 More of a funny anecdote is a check for printing to a | 1886 More of a funny anecdote is a check for being connected to a |
1875 hardcopy terminal that remained in the code until Spring 2012, | 1887 hardcopy terminal. |
1876 when I finally removed it | 1888 It remained in the code until Spring 2012, when I finally removed it |
1877 .Ci b7764c4a6b71d37918a97594d866258f154017ca . | 1889 .Ci b7764c4a6b71d37918a97594d866258f154017ca . |
1878 I surely would be very happy to see such a terminal in action, | 1890 I would be truly happy to see such a terminal in action today, |
1879 maybe actually being able to work on it, but I fear my chances are null. | 1891 maybe even being able to work on it. |
1880 .P | 1892 But I fear my chances are null. |
1881 The check only prevented a pager to be placed between the outputting | 1893 .P |
1894 The check only prevented a pager to be placed between the printing | |
1882 program (\c | 1895 program (\c |
1883 .Pn mhl ) | 1896 .Pn mhl ) |
1884 and the terminal. | 1897 and the terminal. |
1885 In nmh, this could have been ensured with the | 1898 In nmh, this could have been ensured statically with the |
1886 .Sw -nomoreproc | 1899 .Sw -nomoreproc |
1887 at the command line statically, too. | 1900 at the command line, too. |
1888 In mmh, set the profile entry | 1901 In mmh, seting the profile entry |
1889 .Pe Pager | 1902 .Pe Pager |
1890 or the environment variable | 1903 or the environment variable |
1891 .Ev PAGER | 1904 .Ev PAGER |
1892 to | 1905 to |
1893 .Pn cat . | 1906 .Pn cat |
1907 does the job. | |
1894 | 1908 |
1895 | 1909 |
1896 | 1910 |
1897 | 1911 |
1898 .H2 "Attachments | 1912 .H2 "Attachments |
1899 .P | 1913 .P |
1900 The mind model of email attachments is unrelated to MIME. | 1914 The mind model of email attachments is unrelated to MIME. |
1901 Although the MIME RFCs (2045 through 2049) define the technical | 1915 Although the MIME RFCs (2045 through 2049) define the technical |
1902 requirements for having attachments, they do not mention the the word | 1916 requirements for having attachments, they do not mention the word |
1903 ``attachment''. | 1917 ``attachment''. |
1904 Instead of attachments, MIME talks about ``multi-part message bodies'' | 1918 Instead of attachments, MIME talks about ``multi-part message bodies'' |
1905 [RFC\|2045], a more general concept. | 1919 [RFC\|2045], a more general concept. |
1906 Multi-part messages are messages | 1920 Multi-part messages are messages |
1907 ``in which one or more different | 1921 ``in which one or more different |
1908 sets of data are combined in a single body'' | 1922 sets of data are combined in a single body'' |
1909 [RFC\|2046]. | 1923 [RFC\|2046]. |
1910 MIME keeps its descriptions generic; | 1924 MIME keeps its descriptions generic; |
1911 it does not imply specific usage models. | 1925 it does not imply specific usage models. |
1912 In email one usage model became prevalent: attachments. | 1926 One usage model became prevalent: attachments. |
1913 The idea is having a main text document with files of arbitrary kind | 1927 The idea is having a main text document with files of arbitrary kind |
1914 attached to it. | 1928 attached to it. |
1915 In MIME terms, this is a multi-part message having a text part first | 1929 In MIME terms, this is a multi-part message having a text part first |
1916 and parts of arbitray type following. | 1930 and parts of arbitray type following. |
1917 .P | 1931 .P |
1918 MH's MIME support is a direct implementation of the RFCs. | 1932 MH's MIME support is a direct implementation of the RFCs. |
1919 The perception of the topic described in the RFCs is clearly visible | 1933 The perception of the topic described in the RFCs is clearly visible |
1920 in MH's implementation. | 1934 in MH's implementation. |
1921 Thus, MH had all the MIME features but no idea of attachments. | 1935 In result, MH had all the MIME features but no idea of attachments. |
1922 Today, however, users don't need all the MIME features but they want | 1936 But users don't need all the MIME features, |
1923 convenient attachment handling. | 1937 they want convenient attachment handling. |
1938 | |
1924 | 1939 |
1925 .U3 "Composing MIME Messages | 1940 .U3 "Composing MIME Messages |
1926 .P | 1941 .P |
1927 In order to improve the situation on the message composing side, | 1942 In order to improve the situation on the message composing side, |
1928 Jon Steinhart had added an attachment system to nmh in 2002. | 1943 Jon Steinhart had added an attachment system to nmh in 2002. |