Netsurf 2.0 on PDA
by Dmitry Artamonow
Hello and thanks for your exellent work on Netsurf!
After two days of trial and error, I've finally succeeded in
crosscompiling gtk version of Netsurf 2.0 using OpenEmbedded.
Screenshots of Netsurf in action on ipaq hx4700 and h2200 are here:
http://mad.is-a-geek.org/netsurf/
On hx4700's VGA screen it feels perfect, but there's some problems with
QVGA (h2200) - for some reason URL bar is missing in portrait mode, and
you need to change icon size first (non-trivial task itself on QVGA)
for getting it at least in landscape mode.
Also I faced and solved some problems during cross-compilation:
1. make doesn't detect LDFLAGS for openssl, which leads to following
errors during linking:
content/fetchers/fetch_curl.c:879: undefined reference to `X509_free'
content/fetchers/fetch_curl.c:812: undefined reference to `ASN1_INTEGER_get'
...
2. OE version of libxml2 is configured with --without-debug , which
probably causes following:
gtk/gtk_scaffolding.c:1075: undefined reference to `xmlDebugDumpDocument'
Full log for these two errors is here:
http://tinderbox.openembedded.net/public/logs/5236611.txt
3. make install for TARGET=gtk doesn't install some of the files in
gtk/res that leads to various missing functionality and even crashes in
run time
Both #1 and #3 are adressed by attached patch. I worked around #2 by
total removing "Save DOM tree" handler code - don't know how to fix it
properly.
BTW, what's the purpose of gtk/res/docs/about ? It seems to contain some
RISC OS files - do they used in gtk version at all? I can't find any
mentioning of them in gtk code.
--
Best regards,
Dmitry "MAD" Artamonow
13 years, 10 months
Review : Mark Benjamin : glade
by Mark
Hi All,
I'm quite keen to merge the glade branch as a priority, as it would
simplify making/reviewing/merging future progress, so I'm putting in the
review, I hope no-one minds, I know I'm moving ahead at a rate of knots,
I know you've all got real jobs that demand your time too, I just feel
the importance of merging glade branch to save time in the longer term
I should really be revising for the 11 days I have remaining now :-)
I'd just hope that at the end of term I could plunge into making a new
branch for bookmarks
Best
Mark
http://www.halloit.com
Key ID 046B65CF
Message was too big so I'm zipping the glade diffs
Index: gtk/gtk_gui.h
===================================================================
--- gtk/gtk_gui.h (.../trunk/netsurf) (revision 7511)
+++ gtk/gtk_gui.h (.../branches/MarkieB/glade) (revision 7511)
@@ -24,8 +24,16 @@
#include <glade/glade.h>
extern bool gui_in_multitask;
-extern GladeXML *gladeWindows;
-extern char *glade_file_location;
+extern GladeXML *gladeNetsurf;
+extern GladeXML *gladePassword;
+extern GladeXML *gladeWarning;
+extern GladeXML *gladeLogin;
+extern GladeXML *gladeSsl;
+extern char *glade_netsurf_file_location;
+extern char *glade_password_file_location;
+extern char *glade_warning_file_location;
+extern char *glade_login_file_location;
+extern char *glade_ssl_file_location;
extern char *options_file_location;
extern char *res_dir_location;
extern char *print_options_file_location;
Index: gtk/gtk_scaffolding.c
===================================================================
--- gtk/gtk_scaffolding.c (.../trunk/netsurf) (revision 7511)
+++ gtk/gtk_scaffolding.c (.../branches/MarkieB/glade) (revision 7511)
@@ -1219,7 +1219,8 @@
/* load the window template from the glade xml file, and extract
* widget references from it for later use.
*/
- g->xml = glade_xml_new(glade_file_location, "wndBrowser", NULL);
+ g->xml = glade_xml_new(glade_netsurf_file_location,
+ "wndBrowser", NULL);
glade_xml_signal_autoconnect(g->xml);
g->window = GTK_WINDOW(GET_WIDGET("wndBrowser"));
g->notebook = GTK_NOTEBOOK(GET_WIDGET("notebook"));
@@ -1420,7 +1421,8 @@
g->fullscreen = false;
/* create the popup version of the menu */
- g->popup_xml = glade_xml_new(glade_file_location, "menuPopup", NULL);
+ g->popup_xml = glade_xml_new(glade_netsurf_file_location,
+ "menuPopup", NULL);
g->popup_menu = GTK_MENU(glade_xml_get_widget(g->popup_xml,
"menuPopup"));
Index: gtk/gtk_tabs.c
===================================================================
--- gtk/gtk_tabs.c (.../trunk/netsurf) (revision 7511)
+++ gtk/gtk_tabs.c (.../branches/MarkieB/glade) (revision 7511)
@@ -28,7 +28,7 @@
#include "gtk/gtk_tabs.h"
#define TAB_WIDTH_N_CHARS 15
-#define GET_WIDGET(x) glade_xml_get_widget(gladeWindows, (x))
+#define GET_WIDGET(x) glade_xml_get_widget(gladeNetsurf, (x))
static GtkWidget *nsgtk_tab_label_setup(struct gui_window *window);
static void nsgtk_tab_visibility_update(GtkNotebook *notebook, GtkWidget *child,
Index: gtk/gtk_login.c
===================================================================
--- gtk/gtk_login.c (.../trunk/netsurf) (revision 7511)
+++ gtk/gtk_login.c (.../branches/MarkieB/glade) (revision 7511)
@@ -74,7 +74,7 @@
* the widgets we're interested in.
*/
- GladeXML *x = glade_xml_new(glade_file_location, NULL, NULL);
+ GladeXML *x = glade_xml_new(glade_login_file_location, NULL, NULL);
GtkWindow *wnd = GTK_WINDOW(glade_xml_get_widget(x, "wndLogin"));
GtkLabel *lhost, *lrealm;
GtkEntry *euser, *epass;
Index: gtk/gtk_gui.c
===================================================================
--- gtk/gtk_gui.c (.../trunk/netsurf) (revision 7511)
+++ gtk/gtk_gui.c (.../branches/MarkieB/glade) (revision 7511)
@@ -66,7 +66,11 @@
char *default_stylesheet_url;
char *adblock_stylesheet_url;
char *options_file_location;
-char *glade_file_location;
+char *glade_netsurf_file_location;
+char *glade_password_file_location;
+char *glade_warning_file_location;
+char *glade_login_file_location;
+char *glade_ssl_file_location;
char *res_dir_location;
char *print_options_file_location;
@@ -74,7 +78,11 @@
GtkWindow *wndAbout;
GtkWindow *wndWarning;
-GladeXML *gladeWindows;
+GladeXML *gladeNetsurf;
+GladeXML *gladePassword;
+GladeXML *gladeWarning;
+GladeXML *gladeLogin;
+GladeXML *gladeSsl;
GtkWindow *wndTooltip;
GtkLabel *labelTooltip;
@@ -193,12 +201,28 @@
check_homedir();
find_resource(buf, "netsurf.glade", "./gtk/res/netsurf.glade");
- LOG(("Using '%s' as Glade template file", buf));
- glade_file_location = strdup(buf);
+ LOG(("Using '%s' as Netsurf glade template file", buf));
+ glade_netsurf_file_location = strdup(buf);
buf[strlen(buf)- 13] = 0;
LOG(("Using '%s' as Resources directory", buf));
res_dir_location = strdup(buf);
+
+ find_resource(buf, "password.glade", "./gtk/res/password.glade");
+ LOG(("Using '%s' as password glade template file", buf));
+ glade_password_file_location = strdup(buf);
+
+ find_resource(buf, "warning.glade", "./gtk/res/warning.glade");
+ LOG(("Using '%s' as warning glade template file", buf));
+ glade_warning_file_location = strdup(buf);
+
+ find_resource(buf, "login.glade", "./gtk/res/login.glade");
+ LOG(("Using '%s' as login glade template file", buf));
+ glade_login_file_location = strdup(buf);
+
+ find_resource(buf, "ssl.glade", "./gtk/res/ssl.glade");
+ LOG(("Using '%s' as ssl glade template file", buf));
+ glade_ssl_file_location = strdup(buf);
find_resource(buf, "Aliases", "./gtk/res/Aliases");
LOG(("Using '%s' as Aliases file", buf));
@@ -206,16 +230,37 @@
die("Unable to initialise HTML parsing library.\n");
glade_init();
- gladeWindows = glade_xml_new(glade_file_location, NULL, NULL);
- if (gladeWindows == NULL)
- die("Unable to load Glade window definitions.\n");
- glade_xml_signal_autoconnect(gladeWindows);
+ gladeWarning = glade_xml_new(glade_warning_file_location, NULL, NULL);
+ if (gladeWarning == NULL)
+ die("Unable to load glade warning window definitions.\n");
+ glade_xml_signal_autoconnect(gladeWarning);
+
+ gladeNetsurf = glade_xml_new(glade_netsurf_file_location, NULL, NULL);
+ if (gladeNetsurf == NULL)
+ die("Unable to load glade Netsurf window definitions.\n");
+ glade_xml_signal_autoconnect(gladeNetsurf);
+ gladePassword = glade_xml_new(glade_password_file_location, NULL, NULL);
+ if (gladePassword == NULL)
+ die("Unable to load glade password window definitions.\n");
+ glade_xml_signal_autoconnect(gladePassword);
+
+ gladeLogin = glade_xml_new(glade_login_file_location, NULL, NULL);
+ if (gladeLogin == NULL)
+ die("Unable to load glade login window definitions.\n");
+ glade_xml_signal_autoconnect(gladeLogin);
+
+ gladeSsl = glade_xml_new(glade_ssl_file_location, NULL, NULL);
+ if (gladeSsl == NULL)
+ die("Unable to load glade ssl window definitions.\n");
+ glade_xml_signal_autoconnect(gladeSsl);
+
find_resource(buf, "netsurf.xpm", "./gtk/res/netsurf.xpm");
gtk_window_set_default_icon_from_file(buf, NULL);
- wndTooltip = GTK_WINDOW(glade_xml_get_widget(gladeWindows, "wndTooltip"));
- labelTooltip = GTK_LABEL(glade_xml_get_widget(gladeWindows, "tooltip"));
+ /* superfluous ? */
+ wndTooltip = GTK_WINDOW(glade_xml_get_widget(gladeNetsurf, "wndTooltip"));
+ labelTooltip = GTK_LABEL(glade_xml_get_widget(gladeNetsurf, "tooltip"));
nsgtk_completion_init();
@@ -316,11 +361,12 @@
urldb_load(option_url_file);
urldb_load_cookies(option_cookie_file);
+
+ /* superfluous ? */
+ wndAbout = GTK_WINDOW(glade_xml_get_widget(gladeNetsurf, "wndAbout"));
- wndAbout = GTK_WINDOW(glade_xml_get_widget(gladeWindows, "wndAbout"));
+ wndWarning = GTK_WINDOW(glade_xml_get_widget(gladeWarning, "wndWarning"));
- wndWarning = GTK_WINDOW(glade_xml_get_widget(gladeWindows, "wndWarning"));
-
nsgtk_history_init();
nsgtk_download_init();
}
@@ -502,7 +548,7 @@
detail ? detail : "");
buf[sizeof(buf) - 1] = 0;
- gtk_label_set_text(GTK_LABEL(glade_xml_get_widget(gladeWindows, "labelWarning")), buf);
+ gtk_label_set_text(GTK_LABEL(glade_xml_get_widget(gladeWarning, "labelWarning")), buf);
gtk_widget_show_all(GTK_WIDGET(wndWarning));
}
@@ -528,7 +574,7 @@
struct content *c, const struct ssl_cert_info *certs,
unsigned long num)
{
- GladeXML *x = glade_xml_new(glade_file_location, NULL, NULL);
+ GladeXML *x = glade_xml_new(glade_ssl_file_location, NULL, NULL);
GtkWindow *wnd = GTK_WINDOW(glade_xml_get_widget(x, "wndSSLProblem"));
GtkButton *accept, *reject;
void **session = calloc(sizeof(void *), 4);
@@ -632,7 +678,7 @@
void PDF_Password(char **owner_pass, char **user_pass, char *path)
{
- GladeXML *x = glade_xml_new(glade_file_location, NULL, NULL);
+ GladeXML *x = glade_xml_new(glade_password_file_location, NULL, NULL);
GtkWindow *wnd = GTK_WINDOW(glade_xml_get_widget(x, "wndPDFPassword"));
GtkButton *ok, *no;
void **data = malloc(5 * sizeof(void *));
13 years, 10 months
The dom_string design
by Bo Yang
Hi,
After some thoughts about how to integrate lwc_string to libDOM, I
finally figure out a method. I propose as following, any advice are
welcomed.
1. Why we intern strings using lwc_string?
Of course, for squeezing space and efficient string comparison. But
also, interning string has its own cost, so I think interning all
strings in a webpage (or s/dom_string/lwc_string/g) is not a good
idea. There may be hundreds and thousands of strings, intern all these
will cause more collision in the hashtable and waste much memory.
2. Which type of string should we intern?
According 1, I propose to intern strings optionally. We should use
lwc_string to restore the strings, which appears multiple times and
which are necessary to compare frequently. Generally, I mean HTML tag
name, attribute name, enum-like attribute value (such as attribute
"display"'s value which include "inline", "block", "inline-block"...).
And the id attribute value as well as the class attribute value are
also good candidates for intern.
3. When to intern strings?
I think the best time to import lwc_string is when the webpage is
being parsed. The hubbub parser should create lwc_string when it come
across the above types of strings. I propose this way because, if the
hubbub did not create a lwc_string, we should create one in the libDOM
and this require two times of string scanning (one time when page get
parsed in hubbub and one time in libDOM for interning) and of course
not efficient.
For the XML parser, the only way left for us is to intern string in
libDOM. I mean, in the callbacks of libDOM binding.
4. What does the dom_string look like?
I propose, Change a little:
The origin is:
struct dom_string {
uint8_t *ptr; /**< Pointer to string data */
size_t len; /**< Byte length of string */
dom_alloc alloc; /**< Memory (de)allocation function */
void *pw; /**< Client-specific data */
uint32_t refcnt; /**< Reference count */
};
It should be changed to:
struct dom_string {
void *ptr; /**< Pointer to string data when
len >= 0, else pointer to the lwc_string which contain the real
string*/
int len; /**< Byte length of string when
len >=0 and if len == -1, it means the dom_string is intern in ptr */
dom_alloc alloc; /**< Memory (de)allocation function */
void *pw; /**< Client-specific data */
uint32_t refcnt; /**< Reference count */
};
I hope the above comment explain my intent well. The member len takes
two responsibility now. When it equals to -1, it means that the ptr
points to a lwc_string, otherwise if the "len >= 0", it means the ptr
points to a real string buffer. So, our dom_string comparison code
will like:
bool cmp(dom_string *str1, dom_string *str2){
if (str1->len==-1 && str2->len == -1)
return lwc_string_compare((lwc_string *)str1->ptr, (lwc_string
*)str2->ptr);
uint8_t *s1 = (uint8_t *)str1->ptr, *s2 = (uint8_t *)str2->ptr;
if (str1->len==-1)
s1 = STR_OF(str1->ptr);
if (str2->len == -1)
s2 = STR_OF(str2->ptr);
// Compare the two strings
}
5. Some more consideration...
When I think about the strings, I also suspect how we store a
character? Now, we use uint8_t in libDOM, but I think we should use
UTF-16 encoding in DOM. And use uint16_t to replace uint8_t.
I hope I have expressed my idea clearly, if anybody get confused by
me, please shot any question to me. Any criticism and advice will be
appreciated very much! Thanks!
Regards!
Bo
13 years, 10 months
Our status of DOM
by Bo Yang
Hi,
After completing the DOMTS converting "partly", I try to generate
testcases for 3 level DOM core modules and compile the testcases to
try to see how much our API consistent with the DOM Core spec. My
process is as following:
For each testcase in level{1,2,3}/core; do
convert the testcase to C program;
if (error in converting)
Record it as a "Conversion Error";
return
compile the C program against the trunk libDOM;
if (error in compile)
Record it as a "Compile Error";
return
Record a success
done
And the result is:
DOM level1 Core
----------------------------------------
Total: 527
Passed: 514
Failed: 13
Conversion Error: 2
Compile Error: 11
DOM level2 Core
----------------------------------------
Total: 282
Passed: 200
Failed: 82
Conversion Error: 44
Compile Error: 38
DOM level3 Core
---------------------------------------
Total: 722
Passed: 272
Failed: 450
Conversion Error: 161
Compile Error: 289
A conversion error means there are still some DOMTS elements need to
be translated in the converting Perl script. And a compile error means
either there is a converting bug or a DOM interface mismatch. And the
later case holds more than the former case.
For instance, for the level1 result, I found that there are three
interface left out, and they are dom_entity, dom_notation,
dom_comment. And there are some DOMTS elements need to be translated
too, such as <try><catch>. And to my surprise there elements are at
expressed in the DTD at all, I think DOMTS DTD is really outdated.
The result means that there are really much work to do in libDOM. ^_^
Regards!
Bo
13 years, 10 months
GCC 4.4.0 uninitialised variables patch
by Jeroen Habraken
Hi,
A trivial patch for tokeniser.c to stop GCC 4.4.0 whining about
uninitialised variables. In all cases a pointer to a pointer is passed
into which the result is copied, but GCC doesn't understand this.
Regards,
Jeroen 'VeXocide' Habraken
13 years, 10 months
Re: Possible copyright infringement in your software distribution
by Rob Kendrick
On Tue, 5 May 2009 17:30:49 +0100 (BST)
Chris Evans <chris(a)cjemicros.co.uk> wrote:
> > Don't worry; there is
> > a trivial way to comply with the licence under which NetSurf was
> > distributed to you, and the original mail details this.
>
> There doesn't seem to be copy of the relevant document on the copy of
> A9home disc image we made at launch in 2006 (though we have no stock
> at present so can't confirm the current status) What makes you think
> it isn't there?
Because it isn't there on either of the two I have access to, and a
customer at the show said they don't recall it being there.
> Cutting out the middle man should also help ensure that things get
> done correctly first time. It also kills two birds with one stone as
> presumably a copy of the email sent to Matt originally.
Unfortunately, the middle man doesn't matter; you are obliged by the
licence agreement that you received NetSurf under to provide the licence
text and a written offer, as you are distributing it. Simply putting
the licence text and the written offer on a bit of paper in the box is
sufficient for this. (And actually keeping a copy of the source for
three years, of course.)
B.
13 years, 10 months
Re: Possible copyright infringement in your software distribution
by Rob Kendrick
On Tue, 5 May 2009 17:04:52 +0100 (BST)
Chris Evans <chris(a)cjemicros.co.uk> wrote:
> We have no record here of receiving any email on this subject before!
A copy of this email follows at the end of this email; it must have
vanished into the ether. Sorry about that.
> and as " If you are not distributing NetSurf in any form, then sorry
> for the noise," applies to us [1] I woudn't expect to have replied.
>
> [1] There is I believe a very old copy of NetSurf on the A9home's Hard
> drive that we supply but the contents of which is the resposibilty of
> Advantage6 who assure me that the contents of which is legitimate.
Unfortunately, it is you who is distributing it. Advantage 6
distributed it to you, and you are within your rights to demand the
sources to NetSurf from them, in exactly the same way your customers
are within their rights to demand it from you. The creator of the
medium doesn't matter; it is who distributes it. Don't worry; there is
a trivial way to comply with the licence under which NetSurf was
distributed to you, and the original mail details this.
Original email follows;
Hi,
At the Wakefield Show this weekend, several people said they were using
NetSurf as it was shipped with a product you sold. I just thought I'd
drop you a line to make sure that you are distributing this software
legally, as it is surprising how many people don't realise they have
requirements if they wish to do so; otherwise they are essentially
pirating the software. If you are not distributing NetSurf in any
form, then sorry for the noise, although its contents of this email may
be applicable to any other software you distribute that is licenced
under the GPL (like many modern pieces of RISC OS 'freeware').
Basically, if you distribute a binary version of NetSurf, you are
compelled by the licence agreement under which you received NetSurf in
the first place to either include all of the source code alongside, or
provide a written offer valid for three years from the date of
distribution to provide it. Specifically, you should read section
three of the GPL, which I will include here;
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of
Sections 1 and 2 above on a medium customarily used for
software interchange; or,
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than
your cost of physically performing source distribution, a
complete machine-readable copy of the corresponding source
code, to be distributed under the terms of Sections 1 and 2
above on a medium customarily used for software interchange;
or,
c) Accompany it with the information you received as to
the offer to distribute corresponding source code. (This
alternative is allowed only for noncommercial distribution
and only if you received the program in object code or
executable form with such an offer, in accord with
Subsection b above.)
The entire licence, along with the other licences that effect NetSurf
(which are more liberal than the GPL, and thus most likely won't
concern you) are available from;
<http://www.netsurf-browser.org/about/licence>
You should note that you must also distribute a copy of the GPL licence
text along with NetSurf.
The easiest way to make sure you comply with the licence agreement you
have agreed to by redistributing NetSurf is to simply include a piece
of paper in any physical distribution that has the following written on
it;
"Some parts of this product are licenced under the General
Public Licence. You can request a copy of all the sources
to the parts of the software you are entitled to by sending
a request to <email address/postal address>."
You will get bonus points if you include a printed copy of the GPL
text, in addition to a digital copy. The GPL was written before the
internet was widespread, and so "written offer" is slightly confusing.
Most large companies include a physical sheet of paper in their
physical products to completely cover themselves. (Consider Netgear's
routers, which are based on Linux.)
You should also note that it is your responsibility to ensure you can
honour any source requests for three years, and not the NetSurf's
project's. As such, you should keep a copy of the sources for
everything that is GPLed that you distributed; simply forwarding on
your customers to a third party's website is unwise, as that site may
not be assessable in three years time.
If you have any questions or concerns, please don't hesitate to contact
me.
B.
13 years, 10 months
Possible copyright infringement in your software distribution
by Rob Kendrick
Hi,
At the Wakefield Show this weekend, several people said they were using
NetSurf as it was shipped with a product you sold. I just thought I'd
drop you a line to make sure that you are distributing this software
legally, as it is surprising how many people don't realise they have
requirements if they wish to do so; otherwise they are essentially
pirating the software. If you are not distributing NetSurf in any
form, then sorry for the noise, although its contents of this email may
be applicable to any other software you distribute that is licenced
under the GPL (like many modern pieces of RISC OS 'freeware').
Basically, if you distribute a binary version of NetSurf, you are
compelled by the licence agreement under which you received NetSurf in
the first place to either include all of the source code alongside, or
provide a written offer valid for three years from the date of
distribution to provide it. Specifically, you should read section
three of the GPL, which I will include here;
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of
Sections 1 and 2 above on a medium customarily used for
software interchange; or,
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than
your cost of physically performing source distribution, a
complete machine-readable copy of the corresponding source
code, to be distributed under the terms of Sections 1 and 2
above on a medium customarily used for software interchange;
or,
c) Accompany it with the information you received as to
the offer to distribute corresponding source code. (This
alternative is allowed only for noncommercial distribution
and only if you received the program in object code or
executable form with such an offer, in accord with
Subsection b above.)
The entire licence, along with the other licences that effect NetSurf
(which are more liberal than the GPL, and thus most likely won't
concern you) are available from;
<http://www.netsurf-browser.org/about/licence>
You should note that you must also distribute a copy of the GPL licence
text along with NetSurf.
The easiest way to make sure you comply with the licence agreement you
have agreed to by redistributing NetSurf is to simply include a piece
of paper in any physical distribution that has the following written on
it;
"Some parts of this product are licenced under the General
Public Licence. You can request a copy of all the sources
to the parts of the software you are entitled to by sending
a request to <email address/postal address>."
You will get bonus points if you include a printed copy of the GPL
text, in addition to a digital copy. The GPL was written before the
internet was widespread, and so "written offer" is slightly confusing.
Most large companies include a physical sheet of paper in their
physical products to completely cover themselves. (Consider Netgear's
routers, which are based on Linux.)
You should also note that it is your responsibility to ensure you can
honour any source requests for three years, and not the NetSurf's
project's. As such, you should keep a copy of the sources for
everything that is GPLed that you distributed; simply forwarding on
your customers to a third party's website is unwise, as that site may
not be assessable in three years time.
If you have any questions or concerns, please don't hesitate to contact
me.
B.
13 years, 10 months
Re: Possible copyright infringement in your software distribution
by Rob Kendrick
On Fri, 01 May 2009 12:12:16 +0100
R-Comp Interactive/RCI <rci(a)rcomp.demon.co.uk> wrote:
> In message <20090501113906.039c84ac(a)trite.i.flarn.net.i.flarn.net>
> you wrote:
>
> > On Fri, 01 May 2009 11:28:21 +0100
> > R-Comp Interactive/RCI <rci(a)rcomp.demon.co.uk> wrote:
>
> >> Thankyou for your information.
>
> > Hi,
>
> > Can I take this as being that you will from this point on include
> > written offers with the products that you sell?
>
> I believe that's what I said at the show!
Right, I just wanted to make sure :)
> Since there's a little space at the bottom of our printed welcome
> guides, I see no reason not to repeat your kindly-provided (and
> thankfully suscinct) paragraph there too :)
Cool.
> That said, under legal precedent (I was looking into this today for
> some other business), we're already doing so, since "in writing" has
> been extended to cover electronic text as well these days, so as long
> as the written (ie. text) offer is included (which it always has
> been), everything's hunkidory.
Indeed; GPLv3 mops up the ambiguity, but has a bundle of other new
problems. Most companies upon taking legal advice choose to include a
physical written offer, because then there is no possible argument.
And of course, legal precedents only apply in the jurisdictions they
occur in.
B.
13 years, 11 months